質問

私はかなり大きな挿入ステートメントを持っています

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

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

役に立ちましたか?

解決

なぜすべてのレコードを単一のステートメントで挿入したいのですか?準備されたステートメントを使用できます。マルチメディア(Filename、Regex、Flag)値(?、?、?)に挿入できます。

そして、レコードを1つずつ挿入するためのループ。

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

他のヒント

データが分離されたファイルに保存されている場合は、使用できます LOAD DATA INFILE クエリ

このデータのサンプルが役立ちます。

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

$sql = "INSERT INTO users (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22)";

mysql_query( $sql);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top