我有一个非常大的insert语句,类似于
INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));如何为MySQL.It准备查询。手动执行查询太长了。它包含双引号,所以我不能使用php函数mysql_real_escape_string()
发布于 2010-05-11 19:23:13
为什么要用一条语句插入所有记录?您可以使用准备好的语句: INSERT INTO multimedia (filename,regex,flag) 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“模板”。
发布于 2010-05-11 21:42:47
如果数据存储在逗号分隔的文件中,则可以使用LOAD DATA INFILE查询
这些数据的一个样本可能会有所帮助。
https://stackoverflow.com/questions/2810160
复制相似问题