如何将参数传递给动态查询?

时间:2015-12-31 12:42:00

标签: php mysql pdo parameter-passing

我的查询一直不是常量......实际上它会根据某些因素生成。它有时是这样的:

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>

1 个答案:

答案 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

中描述了甚至处理不同类型的解决方案