【发布时间】:2012-08-18 17:48:37
【问题描述】:
我尝试使特定的 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
}
【问题讨论】:
-
REGEXP 指的是这个吗? launchpad.net/mysql-udf-regexp - 如果是你可能想检查你的语法
-
我不记得能够将表名绑定为查询中的参数。
-
谢谢!我不确定我使用的是哪个 REGEXP 实现,但这并不重要,因为在我开始为 PDO 重写代码之前它工作得很好,而对正则表达式没有任何更改。即使 $mytype 只是一个没有空格的简单六字母小写字符串,我也会遇到异常,所以我猜错误隐藏在其他地方......
-
感谢阿克萨纳斯!你走在正确的轨道上。