【问题标题】:MySQL escape string helpMySQL转义字符串帮助
【发布时间】:2010-05-11 11:17:42
【问题描述】:

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

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

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

【问题讨论】:

  • 如果你可以使用mysql_real_escape_string,你的问题是什么?在查询中使用它们之前,您应该在每个变量上使用 mysql_real_escape_string。
  • 查询在逗号分隔的文件中,由于正则表达式中的引号,我无法使用 mysql_real_escape_string
  • 嗨 gAMBOOKa。您可能想在原始帖子中写“不能使用”而不是“可以使用”,不是吗?
  • 这取决于你开始生成插入语句之前数据来自哪里以及它是什么结构

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


【解决方案1】:

为什么要用一条语句插入所有记录?您可以使用准备好的语句: 插入多媒体(文件名、正则表达式、标志)值(?、?、?);

还有一个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“模板”。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 嗨 PHP-Prabhu。我对此投反对票的原因是:1)这实际上是gAMBOOKa想要做的,但问如何做; 2) 恕我直言,使用多个 (...) 表达式动态插入多条记录是个坏主意。
      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2011-04-05
      • 2013-06-26
      • 2019-12-21
      • 2010-11-21
      • 1970-01-01
      相关资源
      最近更新 更多