次のようなかなり大きな挿入ステートメントがあります
INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));
MySQL のクエリを準備するにはどうすればよいですか。手動で行うには長すぎます。二重引用符が含まれているため、php 関数 mysql_real_escape_string() を使用できません
次のようなかなり大きな挿入ステートメントがあります
INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));
MySQL のクエリを準備するにはどうすればよいですか。手動で行うには長すぎます。二重引用符が含まれているため、php 関数 mysql_real_escape_string() を使用できません
1 つのステートメントですべてのレコードを挿入する必要があるのはなぜですか? 準備されたステートメントを使用できます: INSERT INTO マルチメディア (ファイル名、正規表現、フラグ) VALUES (?, ?, ?);
レコードを 1 つずつ挿入する for ループ。
私は PHP プログラマーではありませんが、コードは次のようになります (一部はhttp://php.net/manual/en/pdo.prepared-statements.phpから抜粋):
$stmt = $dbh->prepare("INSERT INTO multimedia (filename, regex, flag) VALUES (:filename, :regex, :flag)");
$stmt->bindParam(':filename', $filename);
$stmt->bindParam(':regex', $regex);
$stmt->bindParam(':flag', $flag);
for ( $i = 1; $i <= ...; $i++) {
$filename = ...
$regex = ...
$flag = ...
$stmt->execute();
}
プリペアド ステートメントを使用すると、DBMS は SQL ステートメントの場合と同様に、SQL を 1 回だけコンパイルします。すべてのレコードが挿入されるか、まったく挿入されないことを確認するには (とにかくそのようなアサーションが必要な場合)、トランザクションを使用します。
さらに、値を文字列に入れる必要がないため、これによりエスケープの問題も解決されます。準備済みステートメントの文字列は、SQL「テンプレート」のみを定義します。
if your data stored in a comma separated file, you can use LOAD DATA INFILE
query
A sample of this data could help.
この方法を試して、単一のクエリで複数の挿入を実行できます...
$sql = "INSERT INTO ユーザー (名前、年齢) 値 (「ヘレン」、24)、 (「カトリーナ」、21)、 ('サミア', 22)"; mysql_query( $sql);