## PHP支持哪些數據庫
PHP通過安裝相應的擴展來實現數據庫操作,現代應用程序的設計離不開數據庫的應用,當前主流的數據庫有MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL,Access等,這些數據庫PHP都能夠安裝擴展來支持,一般情況下常說的LAMP架構指的是:Linux、Apache、Mysql、PHP,因此Mysql數據庫在PHP中的應用非常廣泛,我們會在本章中簡單的了解Mysql的操作方法。
## 數據庫擴展
PHP中一個數據庫可能有一個或者多個擴展,其中既有官方的,也有第三方提供的。像Mysql常用的擴展有原生的mysql庫,也可以使用增強版的mysqli擴展,還可以使用PDO進行連接與操作。
不同的擴展提供基本相近的操作方法,不同的是可能具備一些新特性,以及操作性能可能會有所不同。
mysql擴展進行數據庫連接的方法:
`$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');`
mysqli擴展:
`$link = mysqli_connect('mysql_host', 'mysql_user', 'mysql_password');`
PDO擴展
~~~
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
$dbh = new PDO($dsn, $user, $password);
~~~
## 連接MySQL數據庫
PHP要對數據庫進行操作,首先要做的是與數據庫建立連接,通常我們使用mysql_connect函數進行數據庫連接,該函數需要指定數據庫的地址,用戶名及密碼。
~~~
$host = 'localhost';
$user = 'code1';
$pass = '';
$link = mysql_connect($host, $user, $pass);
~~~
PHP連接數據庫的方式類似于直接在命令行下通過進行連接,類似`:mysql -hlocalhost -ucode1 -p`,當連接成功以后,我們需要選擇一個操作的數據庫,通過mysql_select_db函數來選擇數據庫。
`mysql_select_db('code1');`
通常我們會先設置一下當前連接使用的字符編碼,一般的我們會使用utf8編碼。
`mysql_query("set names 'utf8'");`
通過上面的步驟,我們就與數據庫建立了連接,可以進行數據操作了。
## 執行MySQL查詢
在數據庫建立連接以后就可以進行查詢,采用mysql_query加sql語句的形式向數據庫發送查詢指令。
`$res = mysql_query('select * from user limit 1');`
對于查詢類的語句會返回一個資源句柄(resource),可以通過該資源獲取查詢結果集中的數據。
~~~
$row = mysql_fetch_array($res);
var_dump($row);
~~~
默認的,PHP使用最近的數據庫連接執行查詢,但如果存在多個連接的情況,則可以通過參數指令從那個連接中進行查詢。
~~~
$link1 = mysql_connect('127.0.0.1', 'code1', '');
$link2 = mysql_connect('127.0.0.1', 'code1', '', true); //開啟一個新的連接
$res = mysql_query('select * from user limit 1', $link1); //從第一個連接中查詢數據
~~~
## 插入新數據到MySQL中
當我們了解了如何使用mysql_query進行數據查詢以后,那么類似的,插入數據其實也是通過執行一個sql語句來實現,例如:
~~~
$sql = "insert into user(name, age, class) values('李四', 18, '高三一班')";
mysql_query($sql); //執行插入語句
~~~
通常數據都是存儲在變量或者數組中,因此sql語句需要先進行字符串拼接得到。
~~~
$name = '李四';
$age = 18;
$class = '高三一班';
$sql = "insert into user(name, age, class) values('$name', '$age', '$class')";
mysql_query($sql); //執行插入語句
~~~
在mysql中,執行插入語句以后,可以得到自增的主鍵id,通過PHP的mysql_insert_id函數可以獲取該id。
`$uid = mysql_insert_id();`
這個id的作用非常大,通常可以用來判斷是否插入成功,或者作為關聯ID進行其他的數據操作。
## 取得數據查詢結果
通過前面的章節,我們發現PHP操作數據庫跟MySql客戶端上操作極為相似,先進行連接,然后執行sql語句,再然后獲取我們想要的結果集。
PHP有多個函數可以獲取數據集中的一行數據,最常用的是mysql_fetch_array,可以通過設定參數來更改行數據的下標,默認的會包含數字索引的下標以及字段名的關聯索引下標。
~~~
$sql = "select * from user limit 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
~~~
可以通過設定參數MYSQL_NUM只獲取數字索引數組,等同于mysql_fetch_row函數,如果設定參數為MYSQL_ASSOC則只獲取關聯索引數組,等同于mysql_fetch_assoc函數。
~~~
$row = mysql_fetch_row($result);
$row = mysql_fetch_array($result, MYSQL_NUM); //這兩個方法獲取的數據是一樣的
$row = mysql_fetch_assoc($result);
$row = mysql_fetch_array($result, MYSQL_ASSOC);
~~~
如果要獲取數據集中的所有數據,我們通過循環來遍歷整個結果集。
~~~
$data = array();
while ($row = mysql_fetch_array($result)) {
$data[] = $row;
}
~~~
## 查詢分頁數據
上一節中,我們了解到通過循環可以獲取一個查詢的所有數據,在實際應用中,我們并不希望一次性獲取數據表中的所有數據,那樣性能會非常的低,因此會使用翻頁功能,每頁僅顯示10條或者20條數據。
通過mysql的limit可以很容易的實現分頁,limit m,n表示從m行后取n行數據,在PHP中我們需要構造m與n來實現獲取某一頁的所有數據。
假定當前頁為$page,每頁顯示$n條數據,那么m為當前頁前面所有的數據,既$m = ($page-1) * $n,在知道了翻頁原理以后,那么我們很容易通過構造SQL語句在PHP中實現數據翻頁。
~~~
$page = 2;
$n = 2;
$m = ($page - 1) * $n;
$sql = "select * from user limit $m, $n";
$result = mysql_query($sql);
//循環獲取當前頁的數據
$data = array();
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
~~~
在上面的例子中,我們使用了$m與$n變量來表示偏移量與每頁數據條數,但我們推薦使用更有意義的變量名來表示,比如$pagesize, $start, $offset等,這樣更容易理解,有助于團隊協作開發。
## 更新與刪除數據
數據的更新與刪除相對比較簡單,只需要構建好相應的sql語句,然后調用mysql_query執行就能完成相應的更新與刪除操作。
~~~
$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
echo '更新成功';
}
~~~
同樣的刪除可以使用類似以下的代碼:
~~~
$sql = "delete from user where id=2 limit 1";
if (mysql_query($sql)) {
echo '刪除成功';
}
~~~
對于刪除與更新操作,可以通過mysql_affected_rows函數來獲取更新過的數據行數,如果數據沒有變化,則結果為0。
~~~
$sql = "update user set name = '曹操' where id=2 limit 1";
if (mysql_query($sql)) {
echo mysql_affected_rows();
}
~~~
## 關閉MySQL連接
當數據庫操作完成以后,可以使用mysql_close關閉數據庫連接,默認的,當PHP執行完畢以后,會自動的關閉數據庫連接。
`mysql_close();`
雖然PHP會自動關閉數據庫連接,一般情況下已經滿足需求,但是在對性能要求比較高的情況下,可以在進行完數據庫操作之后盡快關閉數據庫連接,以節省資源,提高性能。
在存在多個數據庫連接的情況下,可以設定連接資源參數來關閉指定的數據庫連接。
~~~
$link = mysql_connect($host, $user, $pass);
mysql_close($link);
~~~
- 前端工程師
- HTML
- 使用meta實現頁面的定時刷新或跳轉
- 表單相關
- 表單元素input、按鈕、文字完美垂直居中對齊方法
- CSS
- 相關工具網站
- JS
- jQuery
- 第1章 初始jQuery
- 環境搭建
- jQuery對象與DOM對象
- jQuery對象轉化成DOM對象
- DOM對象轉化成jQuery對象
- 第2章 jQuery選擇器
- id選擇器
- 類選擇器
- 元素選擇器
- 全選擇器(*選擇器)
- 層級選擇器
- 基本篩選選擇器
- 內容篩選選擇器
- 可見性篩選選擇器
- 屬性篩選選擇器
- 子元素篩選選擇器
- 表單元素選擇器
- 表單對象屬性篩選選擇器
- 特殊選擇器this
- 第3章 jQuery的屬性與樣式
- 元素的數據存儲
- 問題解決方案
- 解決innerHTML包含的js代碼不能被執行的問題
- webpackdoc
- 前端開發框架
- Bootstrap 3.3.6
- 起步
- 全局 CSS 樣式
- 概覽
- 柵格系統
- PHP
- PHP入門篇
- 基礎總結
- PHP環境變量$_SERVER和系統常量詳細說明
- PHP進階篇
- 數組
- 函數
- 類
- 字符串操作
- 正則表達式
- 會話控制
- 文件系統
- 日期和時間
- 圖形圖像操作
- PHP異常處理
- 數據庫操作
- WEB在線文件管理器
- PHP文件操作
- 獲取首層目錄信息
- 獲取文件信息
- 列表顯示文件及大小
- PHP與MySQL關系大揭秘
- PHP支持哪些數據庫
- 數據庫擴展
- 連接MySQL數據庫
- 執行MySQL查詢
- 插入新數據到MySQL中
- MVC架構模式分析與設計
- Smarty模版語法
- Smarty的基本語法
- Smarty的條件判斷語句
- Smarty的循環語句
- Smarty的文件引用
- Smarty類和對象賦值與使用
- Smarty函數的使用
- functions函數插件的定義和使用
- modifiers變量調節器插件的定義和使用
- block functions區塊函數插件的定義和使用
- Smarty實例
- MVC微型框架的建立
- 網絡摘抄
- PHPExcel如何讀取超大excel文件
- Composer
- Composer技巧
- PHP 開發者該知道的 5 個 Composer 小技巧
- composer常用命令
- Composer使用方法整理(Cy23)
- 利用Composer一步一步搭建自己的PHP框架
- ThinkPHP
- ThinkPHP中RBAC類詳解(一)
- 附:添加注釋版RBAC類源碼
- 常見問題
- 常見方法
- thinkphp 合并兩個字段組合成一個臨時字段concat函數
- ThinkPHP Where 條件中使用表達式
- 編程相關工具
- Eclipse
- Eclipse或Zendstudio漢化
- Zend studio
- Zendstudio快捷鍵
- Zend Studio實用快捷鍵一覽表
- Sublime text
- Sublime text快捷鍵
- 16 個 Sublime Text 快捷鍵
- Emmet的用法及相關語法
- VS Code
- 數據庫
- MySql
- 問題匯總
- mysql創建存儲過程失敗1307錯誤解決
- Mysql出現Field * doesn't have a default value解決辦法
- mysql:ADO連接mysql數據庫,驅動程序和ODBC數據源問題
- 自己如何正確獲取MYSQL的ADO連接字符串
- 網上摘抄
- mysql 存在更新 不存在插入
- Mysql字符串字段中是否包含某個字符串,用 find_in_set
- mysql字段類型對應的數字編號
- 5.7mysql group分組查詢錯誤問題
- mysql常用操作語句
- SQL2005
- SQL常見錯誤
- 使用 sp_change_users_login 修復產生的孤 立賬戶 & 還原中的孤立用戶
- ASP
- Url編碼解碼函數合集 含utf-8和gb2312
- 其他前端相關技巧
- 聯機查看 Office 文檔
- 服務器配置
- windows
- 服務器安裝
- XAMPP自帶TOMCAT插件可以支持php+java
- IIS
- iis7服務器,客戶端無法下載exe文件的解決之道
- Linux
- ubuntu
- Linux安裝JDK
- 輔助開發工具
- Git