在PHP中操作數據庫時,常見的需求之一是執行多條SQL語句以完成複雜的事務或批量數據處理。 mysqli_multi_query()函數正是為此設計的,它允許一次性執行多條SQL語句,提高效率和簡化代碼。本文將詳細講解如何在使用connect()函數建立數據庫連接後,正確使用mysqli_multi_query()執行多個SQL語句,並處理返回結果。
首先,我們通過connect()函數建立到MySQL數據庫的連接。假設這是一個封裝好的函數,返回一個有效的mysqli對象。
<?php
function connect() {
$host = 'localhost';
$user = 'root';
$password = 'password';
$database = 'testdb';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die('連接失敗: ' . $conn->connect_error);
}
return $conn;
}
?>
假設我們有多條SQL語句需要執行,比如創建表、插入數據等,可以將它們組合成一個以分號( ; )分隔的字符串,傳遞給mysqli_multi_query() 。
<?php
$conn = connect();
$sql = "
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
INSERT INTO users (username, email) VALUES ('張三', 'zhangsan@m66.net');
INSERT INTO users (username, email) VALUES ('李四', 'lisi@m66.net');
";
if ($conn->multi_query($sql)) {
do {
// 存儲第一個結果集
if ($result = $conn->store_result()) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
// 如果有更多結果集,繼續循環
} while ($conn->more_results() && $conn->next_result());
} else {
echo "多語句執行失敗: " . $conn->error;
}
$conn->close();
?>
SQL語句格式:多條SQL語句必須以分號分隔,且每條語句語法正確。
結果處理: mysqli_multi_query()執行後,需要通過循環store_result()和more_results()來遍歷所有結果集。即使某些語句不返回結果,也要調用next_result()跳到下一個結果。
錯誤處理:執行失敗時可以通過$conn->error獲取具體錯誤信息,方便調試。