我有一个很大的插入语句

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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top