PHP PDO 未命名绑定(bind)变量与标记数量不匹配

标签 php mysql exception pdo

我尝试使用 PDO 未命名占位符进行特定的 MySQL 查询,我怀疑问题可能与第三个问号周围的“”有关,但我就是无法弄清楚。

我得到了异常: “参数数量无效:绑定(bind)变量的数量与 token 的数量不匹配”

这里把函数的相关部分,try-catch之类的去掉了,方便阅读。使用 $column 和 $mytype 调用函数,其中包含简单的字母数字字符串,在我将其更改为 PDO-MySQL 之前,这些字符串可以与早期的纯 MySQL 代码一起正常工作,因此它们应该没问题。

define('SQL_TABLE', 'mytable');

function listThem($column, $mytype) {

   # These lines succeed
   $databaseHandle = new PDO('mysql:host=' . SQL_HOST . ';dbname=' . SQL_DATABASE, SQL_USER, SQL_PASSWORD);
   $databaseHandle->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

   # The following three lines cast the exception
   $input = array(SQL_TABLE, $column, $mytype);
   $statementHandle = $databaseHandle->prepare('SELECT *, ((100 * likes) / (dislikes + 1)) '
      . "AS rating FROM ? WHERE ? REGEXP '?' ORDER BY rating DESC;");
   $statementHandle->execute($input);

   # . . .  more code here
}

最佳答案

您无法使用准备好的语句将表或字段名称绑定(bind)为参数。参数绑定(bind)仅适用于值。

您需要将它们构建到字符串中。只需确保正确过滤值即可。

此外,您不需要使用“?”,绑定(bind)参数会处理这个问题。

关于PHP PDO 未命名绑定(bind)变量与标记数量不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12020874/

相关文章:

php - Wamp Server 3.0.6 作为本地主机正常工作,但不能在网络上工作

php - 通过 .htaccess 从 URL 隐藏目录名称

mysql - 在范围内选择一个数字,它不会与 bash shell 中存在的数字冲突

c++ - 异常后清理

c# - C# 中的内联 'try' 语句可能吗?

c++ - 共享库中的内部异常终止最终用户应用程序

php - codeigniter 的 seo 友好 url

php.ini,sendmail 配置使用 php 脚本发送电子邮件

mysql列转为utf8_bin

MySQL MATCH() 与 ()