【发布时间】:2015-12-31 12:41:59
【问题描述】:
我有一个不是一直不变的查询...,实际上它会根据某些因素生成。有时是这样的:
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。每次我想在查询中使用它时,我都需要传递一个单独的参数。像这样:
对于查询1:
$stm->bindValue(':id', $id, PDO::PARAM_INT);
对于查询2:
$stm->bindValue(':id1', $id, PDO::PARAM_INT);
$stm->bindValue(':id2', $id, PDO::PARAM_INT);
对于查询3:
$stm->bindValue(':id1', $id, PDO::PARAM_INT);
$stm->bindValue(':id2', $id, PDO::PARAM_INT);
$stm->bindValue(':id3', $id, PDO::PARAM_INT);
所以鉴于我不知道需要将:id 参数传递给查询多少次(因为我的查询是动态的),我该如何解决这个问题?
【问题讨论】:
-
您可以使用PDOStatement::debugDumpParams 来查找您的参数,输出正则表达式参数名称并在 bindValue 中使用它们
-
@zedfoxus 老实说,我阅读了您链接的内容两次,但我仍然无法理解该函数的作用......
-
让我看看是否可以构建一个与您的查询类似的示例,以帮助更好地理解它。
-
当我开始创建示例时,我意识到我对 debugDumpParams 的理解是错误的,它并不能解决您的问题。所以我很抱歉把你引向错误的方向。 maxhb 的回答很不错。您如何创建动态查询?您是循环变量还是执行 if..then 来构建查询?
-
@zedfoxus 啊我明白了,不用道歉......!是的,也许我使用 maxhb 的答案。无论如何,谢谢您的关注。
标签: php mysql pdo parameter-passing