转义IN语句PDO MYSQL的字符串数组

How*_*opa 6 php mysql pdo

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

我有一系列值:

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

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

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

foreach($array as $string){
    $s->execute(array($string));
}
Run Code Online (Sandbox Code Playgroud)

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

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

有没有正确的方法来准备这种类型的查询?还是"执行多种"类型的功能?我通常会看到长度为5到50个项目的字符串数组.

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

我的问题是唯一的问题我可以将数组绑定到IN()条件吗?因为我希望绑定一个字符串数组而不是整数.

pal*_*la_ 6

它并不像你想的那么愉快.你必须建立数组?占位符.像这样的东西:

<?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);
?>
Run Code Online (Sandbox Code Playgroud)

这样,每个单独的字符串都会单独绑定和转义,同时仍然为您提供您in要查找的单个查询.改变$s->execute($array)$s->execute(array_values($array))如果这些值实际上在关联数组.