PHP PDO未命名的绑定变量与令牌数不匹配

时间:2012-08-18 17:48:37

标签: php mysql exception pdo

我尝试使用PDO未命名的占位符进行特定的MySQL查询,我怀疑问题可能与第三个问号的''有关,但我无法弄明白。

我得到了例外: '参数号无效:绑定变量数与令牌数

不匹配

为了便于阅读,这里删除了函数的相关部分,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
}

1 个答案:

答案 0 :(得分:3)

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

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

另外,你不需要使用'?',绑定参数可以解决这个问题。