数组在 PDO 中转换为字符串

array is converted as string in PDO

下面是我的查询:

$key = array(1,2);
$in = join(',', array_fill(0, count($key), '?'));
$statement = $pdo->prepare("SELECT * FROM posts WHERE posts.subid IN (".$in.") AND posts.pricing=?  AND posts.Poscode=? ORDER BY posts.Poscode DESC LIMIT 60");
$result = array_merge($key, array($rate,$postcode));
$statement->execute($result);

当我将 $key = array(1,2); 替换为 $key = array($key); 时,查询仅获取第一个 ID 的数据,因此我假设它将数组转换为字符串。

$key 还在如下所示的数组中保存值 1,2:

$a=$data['sub'];

$key0=array();
foreach($a as $v=>$k) 
  {

    $key0[]=$v;

  }

 $key2=implode(',',$key0);
 $key = array($key2);

如何让 PDO 理解 $key 保存的是数组值而不是字符串?

我总是使用命名占位符来解决这个问题。我个人不喜欢 ? 的东西。您的每个值都需要一个占位符。

查看示例代码:

$key = array(1,2);
$pricing = "somePricing";
$postcode = "somePostcode";


$bindings = array();
$bindings[] = array(":pricing", $pricing, PDO::PARAM_STR);
$bindings[] = array(":postcode", $postcode, PDO::PARAM_STR);

$key_placeholders = array();
foreach($key as $k => $v) {
    $placeholder = ":subid".$k;
    $bindings[] = array($placeholder, $v, PDO::PARAM_INT);
    $key_placeholders[] = $placeholder;
}

$sql = "SELECT * FROM posts "
        . "WHERE posts.subid IN (". implode(",",$key_placeholders).") "
        . "AND posts.pricing=:pricing  "
        . "AND posts.Poscode=:postcode "
        . "ORDER BY posts.Poscode "
        . "DESC LIMIT 60";

$statement = $pdo->prepare($sql);
foreach($bindings as $b) {
    $statement->bindValue($b[0],$b[1],$b[2]);
}
$statement->execute();