PDO 多个命名占位符不检索数据
问题描述
到目前为止,如果准备好的语句只有一个命名占位符,我编写的代码可以正常工作,但如果查询有多个条件,则不会从数据库返回任何结果.
The code I've written so far works fine if there is only one named place holder for a prepared statement but if there are multiple conditions for a query, it doesn't return any results from the database.
例如:
工作正常.但如果我尝试:
Works fine. But if I try:
(注意附加的commentID参数)尽管mySQL数据库中有满足条件的数据,但它没有返回任何内容.
(Note the additional commentID parameter) it fails to return anything despite there being data in the mySQL database that satisfies the conditions.
我编写的 PDO 代码是:
The PDO code i've written is:
我正在动态构建查询,因此我通过去除句点和下划线来清理占位符 - 因此使用了cleanPlaceholder"变量.
I'm building queries dynamically and therefore I am cleaning the placeholders, by stripping them of periods and underscores - hence the use of the 'cleanPlaceholder' variable.
正在生成的查询如下所示:
The query being generated looks like this:
被绑定的参数如下所示:
And the parameters being bound look like this:
推荐答案
bindParam 需要参考
问题是你在foreach循环中绑定参数的方式造成的.
bindParam Requires a reference
The problem is caused by the way you bind parameters in the foreach loop.
bindParam
需要引用.它将变量而不是值绑定到语句.由于 foreach 循环中的变量在每次迭代开始时重置,因此只有对 $bound
的最后一个引用保持不变,并且您最终将所有占位符绑定到它.
bindParam
requires a reference. It binds the variable, not the value, to the statement. Since the variable in a foreach loop is reset at the start of each iteration, only the last reference to $bound
is left intact, and you end up binding all your placeholders to it.
这就是为什么您的代码在 $query['where']
仅包含一个条目时可以工作,但在包含多个条目时失败的原因.
That's why your code works when $query['where']
contains only one entry, but fails when it contains more than one.
您可以通过两种方式解决问题:
You can solve the problem in 2 ways:
传值
使用bindValue
代替bindParam
:
这篇关于PDO 多个命名占位符不检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!