我的查询一直不是常量......实际上它会根据某些因素生成。它有时是这样的:
select * from table1 where id = :id
有时候它可能是这样的:
select * from table1 where id = :id
union all
select * from table2 where id = :id
有时候它可能是这样的:
select * from table1 where id = :id
union all
select * from table2 where id = :id
union all
select * from table3 where id = :id
已经:到目前为止,我使用的是PHP版本5.2.6,它完全没问题。我的意思是,我刚刚传递了一次:id
参数,我可以在查询中多次使用它。就是这样:
$stm->bindValue(':id', $id, PDO::PARAM_INT);
这对所有上述查询都很有用。
现在:我已经更新了我的PHP版本(我当前的PHP版本是5.6.8)。嗯,如您所知,在新版本I cannot do that like former中。每次我想在查询中使用它时,我都需要传递一个单独的参数。像这样:
对于query1:
$stm->bindValue(':id', $id, PDO::PARAM_INT);
对于query2:
$stm->bindValue(':id1', $id, PDO::PARAM_INT);
$stm->bindValue(':id2', $id, PDO::PARAM_INT);
对于query3:
$stm->bindValue(':id1', $id, PDO::PARAM_INT);
$stm->bindValue(':id2', $id, PDO::PARAM_INT);
$stm->bindValue(':id3', $id, PDO::PARAM_INT);
所以鉴于我不知道有多少次我需要将:id
参数传递给查询(因为我的查询是动态的),我该如何解决这个问题呢? / p>
答案 0 :(得分:1)
您可以将所有id值存储在数组中并迭代它。
只要所有值的类型相同(int)并且占位符的格式为:idNUMBER:
$ids = array('what','ever');
for($c=0;$c<count($ids);$c++) {
$stm->bindValue(':id' . ($c+1), $ids[$c], PDO::PARAM_INT);
}
不是很优雅但会完成这项工作。
在http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli
中描述了甚至处理不同类型的解决方案