Php pdo查询bindparam数组是否为字符串(或整数)?
我想使用IN运算符进行pdo pgsql查询,其中值(来自变量)还包含单个id-s,以及id-s中的数组,如下所示:Php pdo查询bindparam数组是否为字符串(或整数)?,php,arrays,postgresql,pdo,Php,Arrays,Postgresql,Pdo,我想使用IN运算符进行pdo pgsql查询,其中值(来自变量)还包含单个id-s,以及id-s中的数组,如下所示: $result = "SELECT * FROM table WHERE table.id IN (:id)"; $query = $pgConn->prepare($result); $query->bindparam(':id', $id); $query->execute(); 更新: if ($_POST['select'] == '1') {
$result = "SELECT * FROM table
WHERE table.id IN (:id)";
$query = $pgConn->prepare($result);
$query->bindparam(':id', $id);
$query->execute();
更新:
if ($_POST['select'] == '1') {
$id= 109;
} elseif ($_POST['select'] == '2') {
$id= 111;
} elseif ($_POST['select'] == '3') {
$id= 117;
} elseif ($_POST['select'] == '4') {
$id= 114;
} elseif ($_POST['select'] == '5') {
$id= [108, 107, 101, 103];
} else {
$id=NULL;
}
查询如下所示:
$result = "SELECT * FROM table
WHERE table.id IN (:id)";
$query = $pgConn->prepare($result);
$query->bindparam(':id', $id);
$query->execute();
我尝试以多种方式将数组转换为sting,但查询总是返回相同的错误:“integer的输入语法无效”
一次尝试如下:
$ids_string = "'".implode("','", $id)."'";
返回:
整数的输入语法无效:“108”、“107”、“101”、“103”
另一个辅助问题是使用同一变量的single和array id-s,但我认为稍后使用if-else语句是可以管理的
谢谢你的帮助 根据PHP.net关于和。您可以指定要绑定的变量的类型。因此,为了避免PDO将字符串视为数字,请执行以下操作:
$query -> bindValue (':id', $id, PDO::PARAM_STR);
编辑
要解决将数组绑定到IN()
的问题,我想您必须使用两个循环。一个用于创建占位符,另一个用于绑定参数。
以下是您案例的一个示例:
//create placeholders for IN()
foreach ($id_array as $i => $id) {
if ($i == 0)
$in_query = ':val_'.$i;
else
$in_query .= ', :val_'.$i;
}
//prepare statement with placeholders
$query = $pgConn -> prepare ("SELECT * FROM table WHERE table.id IN ($in_query)");
//bind values to placeholders
foreach ($id_array as $i => $id) {
$query -> bindParam (":val_".$i, $id_array[$i]);
}
看一看是的,我查过这篇文章。我也尝试了一些解决方案。我可以将数组转换为sting,当我将转换后的变量直接放入查询时,它就可以工作了。但是如果我将其放入“$query->bindparam(':id',$id);”代码中,查询会将其视为一个整数值,并返回一个错误:/it不起作用。我也尝试过:$query->bindparam(':id',$id,PDO::PARAM_STR,settype($id,“string”)@阿提拉克好吧……奇怪。然后尝试
bindValue()
而不是bindParam()
。我更新了我的回答:错误:bind消息提供了2个参数,但准备好的语句“pdo_stmt_00000001”需要3'对不起,strlen($id)
必须删除。尚未找到解决方案。装订有问题。如果我将$id直接带到查询中,则无论数据类型如何,一切都正常。但如果我知道这是一个不安全的解决方案。。。