MySQLi是PHP中一個(gè)重要的擴(kuò)展,用于連接MySQL數(shù)據(jù)庫(kù)。與以前的MySQL擴(kuò)展不同,MySQLi提供了很多新的功能和API,其中包括面向?qū)ο蟮木幊棠P秃透玫陌踩浴?/p>
一個(gè)MySQLi對(duì)象可以用于連接到數(shù)據(jù)庫(kù),并調(diào)用查詢。下面是一個(gè)使用MySQLi對(duì)象執(zhí)行查詢的示例:
$mysqli = new mysqli("localhost", "username", "password", "database_name"); $result = $mysqli->query("SELECT * FROM users"); if ($result->num_rows >0) { while($row = $result->fetch_assoc()) { echo $row["username"] . "
"; } } else { echo "0 results"; } $mysqli->close();
首先,我們創(chuàng)建了一個(gè)新的MySQLi對(duì)象,并通過(guò)它的構(gòu)造函數(shù)連接到數(shù)據(jù)庫(kù)。然后,我們將一個(gè)SQL查詢發(fā)送到數(shù)據(jù)庫(kù),從中獲取了一個(gè)結(jié)果集。我們可以使用$result->num_rows屬性來(lái)獲取結(jié)果集中的行數(shù),使用$result->fetch_assoc()方法來(lái)獲取每一行的內(nèi)容。
接下來(lái),我們將每一行的用戶名打印出來(lái),并在打印前插入一個(gè)換行符。如果結(jié)果集中沒(méi)有任何行,則會(huì)顯示"0 results"。最后,我們使用$mysqli->close()方法關(guān)閉MySQLi連接。
下面是一個(gè)使用MySQLi預(yù)處理語(yǔ)句(Prepared Statements)防止SQL注入攻擊的示例:
$mysqli = new mysqli("localhost", "username", "password", "database_name"); $stmt = $mysqli->prepare("SELECT * FROM users WHERE username=? AND password=?"); $stmt->bind_param("ss", $username, $password); $username = "john"; $password = "password123"; $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows >0) { while($row = $result->fetch_assoc()) { echo $row["username"] . "
"; } } else { echo "0 results"; } $stmt->close(); $mysqli->close();
首先,我們創(chuàng)建了一個(gè)新的MySQLi對(duì)象,并通過(guò)它的構(gòu)造函數(shù)連接到數(shù)據(jù)庫(kù)。然后,我們準(zhǔn)備了一個(gè)包含"?"的查詢,這些"?"將被替換為真實(shí)的值。我們使用$stmt->bind_param()方法將變量綁定到查詢中的"?",并以字符串形式指定每個(gè)變量的類型。
接下來(lái),我們?yōu)?username和$password變量設(shè)置值,并使用$stmt->execute()方法來(lái)執(zhí)行查詢。我們使用$stmt->get_result()方法來(lái)獲取結(jié)果集,并檢查是否有行。最后,我們關(guān)閉了$stmt和$mysqli對(duì)象。
MySQLi還支持事務(wù)。下面是一個(gè)使用MySQLi事務(wù)的示例:
$mysqli = new mysqli("localhost", "username", "password", "database_name"); $mysqli->begin_transaction(); $stmt = $mysqli->prepare("UPDATE account SET balance=balance-100 WHERE id=1"); $stmt->execute(); $stmt = $mysqli->prepare("UPDATE account SET balance=balance+100 WHERE id=2"); $stmt->execute(); $mysqli->commit(); $mysqli->close();
首先,我們創(chuàng)建了一個(gè)新的MySQLi對(duì)象,并通過(guò)它的構(gòu)造函數(shù)連接到數(shù)據(jù)庫(kù)。然后,我們使用$mysqli->begin_transaction()方法啟動(dòng)一個(gè)事務(wù)。接下來(lái),我們執(zhí)行了兩個(gè)查詢,其中一個(gè)從賬戶1中扣除100元,另一個(gè)將100元存入賬戶2中。
最后,我們使用$mysqli->commit()方法提交事務(wù),并將所有更改保存到數(shù)據(jù)庫(kù)中。如果任何一個(gè)查詢失敗,則可以使用$mysqli->rollback()方法回滾事務(wù),撤銷所有更改。
除了以上示例中的用法,MySQLi還支持其他許多功能和API,可以在PHP文檔中查找更多信息。MySQLi是PHP中連接MySQL數(shù)據(jù)庫(kù)的重要工具之一,它提供了很多在連接到和操作數(shù)據(jù)庫(kù)時(shí)非常有用的新功能。
總之,MySQLi對(duì)象是一個(gè)非常重要的PHP擴(kuò)展,用于連接和操作MySQL數(shù)據(jù)庫(kù)。在使用MySQLi時(shí),一定要使用預(yù)處理語(yǔ)句來(lái)防止SQL注入攻擊,并使用事務(wù)來(lái)保證查詢的一致性。