数组在 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();
下面是我的查询:
$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();