1
(边注:阻止有问题的标题不停止智能驴象我把U + 203C双感叹号,而不是:P)PDO +评论+? !=错误
快速一轮的调试后,我发现这样的:
$query = <<<END
SELECT
`column1`, `column2`,
SOME_FUNCTION(`column3`) -- process in PHP instead?
FROM `tablename`
WHERE `condition` BETWEEN ? AND ?
END;
$stmt = $pdo->prepare($query);
$stmt->execute(array(1,10));
,并得到这样的:
未捕获的异常» RuntimeException的» PDOException:
SQLSTATE [HY093]:无效的参数编号:绑定变量的数量不符令牌
数你看到了什么问题?
将注释
-- process in PHP instead?
中的问号解释为将参数绑定到的标记! PDO然后期望三个参数而不是通过的两个参数。
现在,很明显,简单的解决方案是重写评论,但这感觉就像我在避免可能是一个更大的问题。
PDO有可能是错误的,或者有一个选项,我可以设置让它了解MySQL的意见?
啊,我明白了,这是准备好的语句模拟的结果。好的。 mysql驱动程序是否支持没有模拟的准备语句? – 2014-10-29 15:08:28
看起来像PDO [可以做到这一点,但不适用于MySQL](http://stackoverflow.com/questions/10617057/does-pdo-always-use-emulated-prepared-statements-by-default)。 – tadman 2014-10-29 15:09:37
我刚刚尝试禁用'ATTR_EMULATE_PREPARES',它完全执行我准备好的语句 - 甚至更好,它不再对我的问题评论有问题。 – 2014-10-29 15:15:13