转义 IN 语句 PDO 的字符串数组 MYSQL
Escape Array of Strings for IN Statement PDO MYSQL
我想使用 IN 语句而不是 运行 循环来更新 table 中的值(假设它更快?)。
我有一组值:
$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"";
是否有准备此类查询的正确方法?还是 "execute many" 类型的函数?我通常会看到长度为 5 - 50 项的字符串数组。
###### 为什么这个问题很独特 ######
我的问题对于 Can I bind an array to an IN() condition? 来说是独一无二的,因为我想绑定一个字符串数组而不是整数。
没有你想的那么愉快。你必须建立一个数组?占位符。像这样:
<?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);
?>
这样,每个单独的字符串都被单独绑定和转义,同时仍然为您提供您正在寻找的单个 in
查询。如果这些值实际上在关联数组中,则将 $s->execute($array)
更改为 $s->execute(array_values($array))
。
我想使用 IN 语句而不是 运行 循环来更新 table 中的值(假设它更快?)。
我有一组值:
$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"";
是否有准备此类查询的正确方法?还是 "execute many" 类型的函数?我通常会看到长度为 5 - 50 项的字符串数组。
###### 为什么这个问题很独特 ######
我的问题对于 Can I bind an array to an IN() condition? 来说是独一无二的,因为我想绑定一个字符串数组而不是整数。
没有你想的那么愉快。你必须建立一个数组?占位符。像这样:
<?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);
?>
这样,每个单独的字符串都被单独绑定和转义,同时仍然为您提供您正在寻找的单个 in
查询。如果这些值实际上在关联数组中,则将 $s->execute($array)
更改为 $s->execute(array_values($array))
。