我尝试使用 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/