mysql逃脱字符串帮助
-
25-09-2019 - |
题
我有一个很大的插入语句
INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));
我如何准备MySQL的查询。这太长了,无法手动进行。它包括双引号,因此我无法使用php函数mysql_real_escape_string()
解决方案
您为什么要用单个语句插入所有记录?您可以使用准备好的语句:插入多媒体(文件名,正则flag)值(?,?,?);
还有一个循环逐一插入记录。
我不是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进行编译一次。为了确保插入全部或没有记录(如果您需要这样的断言),请使用事务。
此外,这也将解决您的逃避问题,因为您不需要将这些值放入字符串中。准备好的语句的字符串仅定义SQL“模板”。
其他提示
如果您的数据存储在逗号分隔的文件中,则可以使用 LOAD DATA INFILE
询问
这些数据的示例可能会有所帮助。
您可以尝试以这种方式执行单个查询中的多个插入...
$sql = "INSERT INTO users (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22)"; mysql_query( $sql);
不隶属于 StackOverflow