0

我有一个相当大的插入语句,例如

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

如何为 MySQL 准备查询。手动执行太长了。它包含双引号,所以我不能使用 php 函数 mysql_real_escape_string()

4

3 回答 3

2

为什么要用一条语句插入所有记录?您可以使用准备好的语句: INSERT INTO media (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-11T11:23:12.603 回答
0

如果您的数据存储在逗号分隔的文件中,您可以使用LOAD DATA INFILE查询

这些数据的样本可能会有所帮助。

于 2010-05-11T13:42:47.000 回答
-2

您可以尝试这种方式在单个查询中执行多个插入...

$sql = "插入用户(姓名、年龄)
  价值观
  (“海伦”,24),
  ('卡特里娜',21),
  (‘萨米亚’,22)”;

mysql_query($sql);
于 2010-05-11T11:42:31.853 回答