在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获取具体错误信息,方便调试。