MySQL转义字符串帮助

时间:2010-05-11 11:17:43

标签: php mysql escaping mysql-real-escape-string

我有一个非常大的插入语句,如

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

如何为MySQL编写查询。手动执行此操作的时间太长。它包括双引号,所以我不能使用php函数mysql_real_escape_string()

3 个答案:

答案 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);