MySQLエスケープ文字列ヘルプ
-
25-09-2019 - |
質問
私はかなり大きな挿入ステートメントを持っています
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);
所属していません StackOverflow