我尝试使用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
}
答案 0 :(得分:3)
您不能使用预准备语句将表或字段名称绑定为参数。参数绑定仅适用于值。
您需要将它们构建到字符串中。只需确保正确过滤值。
另外,你不需要使用'?',绑定参数可以解决这个问题。