0

我尝试使特定的 MySQL 查询与 PDO 未命名的占位符一起工作,我怀疑这个问题可能与第三个问号周围的“”有关,但我就是想不通。

我得到了异常:'无效的参数号:绑定变量的数量与令牌的数量不匹配'

为了便于阅读,这里去掉了函数的相关部分,try-catch之类的。在我将其更改为 PDO-MySQL 之前,使用包含简单字母数字字符串的 $column 和 $mytype 调用函数,这些字符串在早期的纯 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
}
4

1 回答 1

4

您不能使用准备好的语句将表或字段名称绑定为参数。参数绑定仅适用于值。

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

此外,您不需要使用“?”,绑定参数可以解决这个问题。

于 2012-08-18T17:59:49.627 回答