0

次のようなかなり大きな挿入ステートメントがあります

INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));

MySQL のクエリを準備するにはどうすればよいですか。手動で行うには長すぎます。二重引用符が含まれているため、php 関数 mysql_real_escape_string() を使用できません

4

3 に答える 3

2

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「テンプレート」のみを定義します。

于 2010-05-11T11:23:12.603 に答える
0

if your data stored in a comma separated file, you can use LOAD DATA INFILE query

A sample of this data could help.

于 2010-05-11T13:42:47.000 に答える
-2

この方法を試して、単一のクエリで複数の挿入を実行できます...

$sql = "INSERT INTO ユーザー (名前、年齢)
  値
  (「ヘレン」、24)、
  (「カトリーナ」、21)、
  ('サミア', 22)";

mysql_query( $sql);
于 2010-05-11T11:42:31.853 に答える