php使用mysqli
mysqli全稱(chēng)為MySQL Improved Extension,是php語(yǔ)言中專(zhuān)門(mén)用于訪(fǎng)問(wèn)MySQL數(shù)據(jù)庫(kù)的擴(kuò)展模塊,它具有許多優(yōu)點(diǎn),包括速度比較快、安全性較高,而且支持了多種語(yǔ)句查詢(xún),開(kāi)發(fā)者可以通過(guò)mysqli連接到數(shù)據(jù)庫(kù)并執(zhí)行查詢(xún),具有很高的靈活性和可編程性。下面就來(lái)詳細(xì)介紹下mysqli的使用方法。
1. 連接數(shù)據(jù)庫(kù)
mysqli連接數(shù)據(jù)庫(kù)需要用到用戶(hù)名、密碼、數(shù)據(jù)庫(kù)名和主機(jī)名,有兩種方法,一種是面對(duì)對(duì)象的方式,另一種是面對(duì)過(guò)程的方式,以面對(duì)對(duì)象的方式為例:
$mysqli = new mysqli("localhost", "username", "password", "database"); if ($mysqli->connect_error) { die("連接數(shù)據(jù)庫(kù)失敗: " . $mysqli->connect_error); } echo "連接數(shù)據(jù)庫(kù)成功!";
如果連接出現(xiàn)問(wèn)題,直接輸出錯(cuò)誤信息,后面的代碼也不會(huì)執(zhí)行。
2. 執(zhí)行查詢(xún)
mysqli執(zhí)行查詢(xún)時(shí)可以通過(guò)兩種方式,一種是面對(duì)對(duì)象的方式,另一種是面對(duì)過(guò)程的方式。下面分別介紹這兩種方式:
2.1 面對(duì)對(duì)象的方式
在mysqli面對(duì)對(duì)象的方式中,可以使用query()函數(shù)來(lái)進(jìn)行查詢(xún),其語(yǔ)法如下:
$result = $mysqli->query("SELECT * FROM table_name"); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " Age: " . $row["age"]. "<br>"; } } else { echo "0 結(jié)果"; }
這里的query()函數(shù)將返回一個(gè)mysqli_result對(duì)象,可以使用num_rows屬性來(lái)判斷是否有數(shù)據(jù)查詢(xún)到,如果有數(shù)據(jù),則使用fetch_assoc()方法來(lái)獲取查詢(xún)結(jié)果。
2.2 面對(duì)過(guò)程的方式
在mysqli面對(duì)過(guò)程的方式中,可以使用mysqli_query()函數(shù)來(lái)進(jìn)行查詢(xún),其語(yǔ)法如下:
$result = mysqli_query($mysqli, "SELECT * FROM table_name"); if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo "id: " . $row["id"]. " - Name: " . $row["name"]. " Age: " . $row["age"]. "<br>"; } } else { echo "0 結(jié)果"; }
這里的mysqli_query()函數(shù)直接返回查詢(xún)結(jié)果,可以使用mysqli_num_rows()函數(shù)來(lái)判斷是否有數(shù)據(jù)查詢(xún)到,如果有則使用mysqli_fetch_assoc()函數(shù)來(lái)獲取查詢(xún)結(jié)果。
3. 預(yù)處理語(yǔ)句
mysqli中提供了預(yù)處理語(yǔ)句來(lái)進(jìn)行更加安全的查詢(xún),這種方法可以防止SQL注入攻擊,可以使用PreparedStatement的方式來(lái)預(yù)處理查詢(xún)語(yǔ)句。具體過(guò)程如下:
//創(chuàng)建prepared statement $stmt = $mysqli->prepare("SELECT * FROM table_name WHERE name=? AND age=?"); //綁定參數(shù) $stmt->bind_param("si", $name, $age); //設(shè)置參數(shù)并執(zhí)行 $name = "Tom"; $age = 20; $stmt->execute(); //獲取結(jié)果 $result = $stmt->get_result(); if($result->num_rows > 0){ while($row = $result->fetch_assoc()){ echo "id: " . $row["id"]. " - Name: " . $row["name"]. " Age: " . $row["age"]. "<br>"; } } else { echo "0 結(jié)果"; }
這里的bindParam()方法用來(lái)綁定參數(shù),第一個(gè)參數(shù)是預(yù)處理語(yǔ)句中參數(shù)的類(lèi)型,"si"代表兩個(gè)參數(shù)的類(lèi)型,s表示字符串類(lèi)型,i表示整數(shù)類(lèi)型,第二個(gè)參數(shù)是你要查詢(xún)的數(shù)據(jù);第二個(gè)參數(shù)是通過(guò)變量的方式傳遞進(jìn)去的,這樣可以避免SQL注入攻擊。
4. 關(guān)閉連接
mysqli使用完畢后需要釋放資源,也就是關(guān)閉連接,這里提供兩種方法,一種是面對(duì)對(duì)象的方式,另一種是面對(duì)過(guò)程的方式:
4.1 面對(duì)對(duì)象的方式
$mysqli->close();
4.2 面對(duì)過(guò)程的方式
mysqli_close($mysqli);
這里分別對(duì)mysqli進(jìn)行了關(guān)閉操作。
總結(jié)
以上就是mysqli的基本使用方法,從連接數(shù)據(jù)庫(kù)到查詢(xún)數(shù)據(jù)等操作都已經(jīng)講解清楚,如果您還有其他的問(wèn)題,可以參考官方文檔或者其他相關(guān)教程。