php - 为 IN 语句 PDO MYSQL 转义字符串数组

标签 php mysql pdo

<分区>

我不想运行循环来更新表中的值,而是使用 IN 语句(假设它更快?)。

我有一组值:

$array (
    1 => Tom
    2 => Bob
    3 => Sally's String
    4 => Pesce is Italian for "fish"
   )

我正在使用循环,因为我可以单独准备每个字符串以解决潜在的坏字符:

$sql = "UPDATE table SET data = 1 WHERE my_string = ?";
$s = pdoObject->prepare($sql);

foreach($array as $string){
    $s->execute(array($string));
}

我喜欢使用 IN 语句(同样,假设它更快,如果我错了请告诉我)。问题是,鉴于我的字符串数组中存在不同类型的字符,创建 IN 语句会导致一些错误。例如;

$inString = '"'.implode('","',$array).'"';
// $inString would be "Tom","Bob","Sally's String","Pesche is Italian for "fish"";

是否有合适的方法来准备此类查询?还是“执行很多”类型的功能?我通常会看到长度为 5 到 50 项的字符串数组。

###### 为什么这个问题很独特 ######

我的问题是特有问题Can I bind an array to an IN() condition?因为我希望绑定(bind)一个字符串数组而不是整数。

最佳答案

没有你想的那么愉快。你必须建立一个数组?占位符。像这样:

<?php
  $array = array('Tom', 'Bob', 'Sally\'s String', 'Pesce is Italian for "fish"');
  $placeholders = implode(',', array_fill(0, count($array), '?'));

  $sql = "UPDATE table SET data = 1 WHERE my_string IN ( $placeholders )";
  // $sql now contains "UPDATE table SET data = 1 WHERE my_string IN ( ?,?,?,? )"
  $s = $pdo->prepare($sql);
  $s->execute($array);
?>

这样,每个单独的字符串都被单独绑定(bind)和转义,同时仍然为您提供您正在寻找的单个 in 查询。如果这些值实际上在关联数组中,则将 $s->execute($array) 更改为 $s->execute(array_values($array))

关于php - 为 IN 语句 PDO MYSQL 转义字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760477/

相关文章:

php - 在页面之间重定向时在 URL 末尾的奇怪#

php - 如何获得最大数量的不同值

php - 搜索栏查找用户

php - 如何在创建 "new PDO"之前检查凭据是否正确或数据库是否存在

php - 连接到数据库,包括 "mysql_select"转换为 pdo

php - 如何在 PHP 中使用 MaxMind 的 GeoIp2 和另一个自动加载器?

php - 如何使用 jquery 或 php 打印月中特定日期

php - 自定义字段未显示在自定义帖子类型帖子中

mysql - 如何为每一天选择不同的ip

php - PDO PHP 字符串输入以数字 ("2abcd"开始)在 $stmt->bindParam ("2", $id) 中被修剪为只有数字 (':id' );