PHPでデータベースを操作する場合、一般的な要件の1つは、複数の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ステートメントがあると仮定し、それらをセミコロン( ; )delimited文字列に結合し、 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 ('li si', '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()が実行された後、すべての結果セットは、looping store_result()およびmore_results()によって移動する必要があります。いくつかのステートメントが結果を返さない場合でも、 next_result()に電話して次の結果にジャンプします。
エラー処理:実行が失敗した場合、 $ conn->エラーを使用して特定のエラー情報を取得でき、簡単にデバッグできます。