php數(shù)據(jù)庫(kù)連接步驟
我們?yōu)榇蠹覍?shù)據(jù)庫(kù)連接整理成了最重要的8個(gè)步驟,我戲稱它為:“數(shù)據(jù)庫(kù)連接天龍八步”。
這八個(gè)步驟如下,并且將每一步使用的函數(shù)都做了說(shuō)明:
第一步: 連接數(shù)據(jù)庫(kù)服務(wù)器
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_connect |
功能 | 連接到mysql數(shù)據(jù)庫(kù)服務(wù)器 |
參數(shù)1 | 主機(jī) |
參數(shù)2 | 數(shù)據(jù)庫(kù)服務(wù)器登陸名 |
參數(shù)3 | 密碼 |
參數(shù)4 | 數(shù)據(jù)庫(kù)的名稱 |
參數(shù)5 | 數(shù)據(jù)庫(kù)服務(wù)器端口不填默認(rèn)3306 |
若參數(shù)4,數(shù)據(jù)庫(kù)名稱在此步已填并擇,不需要執(zhí)行第三步。
第二步: 判斷錯(cuò)誤
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_errno |
功能 | 返回連接錯(cuò)誤號(hào),無(wú)錯(cuò)誤返回0 |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_error |
功能 | 返回連接錯(cuò)誤字符串 |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
第三步: 選擇數(shù)據(jù)庫(kù)
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_select_db |
功能 | 選擇本連接中的數(shù)據(jù)庫(kù) |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
參數(shù)2 | 需要連接的數(shù)據(jù)庫(kù)名 |
若在第一步已填數(shù)據(jù)庫(kù),不需要更換成其他數(shù)據(jù)庫(kù),則不需要執(zhí)行第三步。
第四步: 設(shè)置字符集
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_set_charset |
功能 | 設(shè)置與mysql服力器連接,結(jié)果,校驗(yàn)字符集 |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
參數(shù)2 | 字符集類型 |
更多注意項(xiàng),請(qǐng)關(guān)注本書《13.6 數(shù)據(jù)顯示亂碼終極解決方案》
第五步: 準(zhǔn)備SQL語(yǔ)句
其實(shí)就是一個(gè)SQL語(yǔ)句的字符串。
例如:
<?php $sql = "insert into user(username,password) values('$username','$password')"; $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Could not connect: ' . mysql_error()); } // some code ?>
我們通常要把變量賦值在SQL語(yǔ)句中使用??墒亲兞炕蛘逽QL語(yǔ)句出錯(cuò)了,非常不好排查。
我們根據(jù)實(shí)際工作經(jīng)驗(yàn)增加了這一步。
如果在執(zhí)行此步的時(shí)候報(bào)錯(cuò)了,我們可以把SQL語(yǔ)句打印出來(lái),粘貼到phpMyAdmin或者相關(guān)工具中。
排錯(cuò)時(shí),如果執(zhí)行成功就說(shuō)明不是SQL語(yǔ)句的問(wèn)題。如果執(zhí)行失敗,請(qǐng)仔細(xì)檢查SQL語(yǔ)句。
第六步: 發(fā)送SQL語(yǔ)句
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_query |
功能 | 發(fā)送SQL語(yǔ)句 |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
參數(shù)2 | 傳入發(fā)送的SQL語(yǔ)句 |
SQL語(yǔ)句準(zhǔn)備完成,需要通過(guò)mysqli_query將SQL語(yǔ)句發(fā)送給MySQL服務(wù)器。
MySQL服務(wù)器會(huì)執(zhí)行發(fā)送過(guò)來(lái)的SQL語(yǔ)句進(jìn)行執(zhí)行。
第七步: 判斷是否執(zhí)行正?;蛘弑闅v數(shù)據(jù)
讀取
第6步中,發(fā)送的是select類別的語(yǔ)句,通常需要將結(jié)果輸出顯示出來(lái)。就需要用到遍歷顯示數(shù)據(jù)的函數(shù)。
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_fetch_array |
功能 | 得到result結(jié)果集中的數(shù)據(jù),返回?cái)?shù)組進(jìn)行便利 |
參數(shù)1 | 傳入查詢出來(lái)的結(jié)果變量 |
參數(shù)2 | 傳入MYSQLI_NUM返回索引數(shù)組,MYSQLI_ASSOC返回關(guān)聯(lián)數(shù)組,MYSQLI_BOTH返回索引和關(guān)聯(lián) |
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_fetch_assoc |
功能 | 得到result結(jié)果集中的數(shù)據(jù),返回關(guān)聯(lián)數(shù)組進(jìn)行便利 |
參數(shù)1 | 傳入查詢出來(lái)的結(jié)果變量 |
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_fetch_row |
功能 | 得到result結(jié)果集中的數(shù)據(jù),返回索引數(shù)組進(jìn)行便利 |
參數(shù)1 | 傳入查詢出來(lái)的結(jié)果變量 |
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_fetch_object |
功能 | 得到result結(jié)果集中的數(shù)據(jù),返回對(duì)象進(jìn)行遍歷 |
參數(shù)1 | 傳入查詢出來(lái)的結(jié)果變量 |
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_num_rows |
功能 | 返回查詢出來(lái)的結(jié)果總數(shù) |
參數(shù)1 | 傳入查詢出來(lái)的結(jié)果變量 |
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_num_rows |
功能 | 返回查詢出來(lái)的結(jié)果總數(shù) |
參數(shù)1 | 傳入查詢出來(lái)的結(jié)果變量 |
注 | 實(shí)際工作中用得非常少,了解 |
寫入
第6步中,如果發(fā)送的是insert的語(yǔ)句,通常需要得到是否執(zhí)行成功,或者同時(shí)拿到自增的ID。
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_fetch_field |
功能 | 遍歷數(shù)據(jù)行 |
參數(shù)1 | 傳入查詢出來(lái)的結(jié)果變量 |
修改和刪除
第6步中,如果發(fā)送的是update和delete類別的語(yǔ)句。只需要判斷是否執(zhí)行成功即可。
我們將這些常用函數(shù)列出數(shù)據(jù)表給給大家查看。
第八步: 關(guān)閉數(shù)據(jù)庫(kù)
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_close |
功能 | 關(guān)閉數(shù)據(jù)庫(kù)連接 |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
數(shù)據(jù)庫(kù)連接是一個(gè)資源類型。我們?cè)谥暗恼鹿?jié)中講解資源類型的時(shí)候跟大家說(shuō)過(guò)。凡是涉及到數(shù)資源類型的有打開就有關(guān)閉。這樣能夠保證PHP更高效的處理和回收資源。
因此,數(shù)據(jù)庫(kù)連接成功后,不需要使用的時(shí)候。我們可以關(guān)閉這個(gè)連接。
其他:顯示服務(wù)器信息函數(shù)
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_get_server_info |
功能 | 返回服務(wù)器信息 |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
類型 | 說(shuō)明 |
---|---|
函數(shù) | mysqli_get_server_version |
功能 | 返回服務(wù)器版本 |
參數(shù)1 | 傳入mysqli_connect返回的資源 |
注意:
mysqli只學(xué)過(guò)程化的方法即可。在面向?qū)ο箅A段實(shí)際工作中完全拋棄了mysqli的對(duì)象用法,而是使用的是PDO對(duì)象連接數(shù)據(jù)庫(kù)的方式。