データベースに大量のデータを挿入するなど、SQL ステートメントに同等の操作がある場合、単一実行とバッチ実行の両方が継続的になるため、SQL ステートメントを個別またはバッチで実行する元の方法は明らかに実行できません。 SQL ステートメントをデータベースに送信すると、データベースが SQL ステートメントをコンパイルして処理するため、効率が低くなります。
php にあるプリコンパイルは、この問題を解決します。その動作原理は、SQL ステートメントを送信すると、データベースが SQL ステートメントをプリコンパイルするというものです。その後は、データをデータベースに送信するだけです。
以下は、この状況を説明するための公式の例です:
<?php$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');/* check connection */if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit();}$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);$code = 'DEU';$language = 'Bavarian';$official = "F";$percent = 11.2;/* execute prepared statement */$stmt->execute();printf("%d Row inserted.\n", $stmt->affected_rows);/* close statement and connection */$stmt->close();/* Clean up table CountryLanguage */$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");printf("%d Row deleted.\n", $mysqli->affected_rows);/* close connection */$mysqli->close();?>
$stmt->bind_param はパラメータを実行します。バインディング。
$stmt->execute(); は挿入操作用です。
複数のデータを挿入する必要がある場合は、$stmt->bind_param と $stmt->execute(); を操作するだけです。