我有一个非常大的插入语句,如
INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));
如何为MySQL编写查询。手动执行此操作的时间太长。它包括双引号,所以我不能使用php函数mysql_real_escape_string()
答案 0 :(得分:2)
为什么要使用单个语句插入所有记录?您可以使用准备好的声明: 插入多媒体(文件名,正则表达式,标志)VALUES(?,?,?);
和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语句一样。要确保插入全部或没有记录(如果您还需要这样的断言),请使用事务。
此外,这也可以解决您的转义问题,因为您不需要将值放在字符串中。预准备语句的字符串仅定义SQL“模板”。
答案 1 :(得分:0)
如果您的数据存储在逗号分隔文件中,则可以使用LOAD DATA INFILE
查询
此数据的示例可能有所帮助。
答案 2 :(得分:-2)
您可以尝试这种方式在单个查询中执行多个插入...
$sql = "INSERT INTO users (name, age) VALUES ('Helen', 24), ('Katrina', 21), ('Samia', 22)"; mysql_query( $sql);