PDO+注释+?=错误‼


PDO + comment + ? = Error‼

经过一轮快速调试,我发现:

$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));

得到了这个:

未捕获异常»运行时异常»PDO异常:
SQLSTATE[HY093]:参数编号无效:绑定变量的数量与令牌的数量不匹配

你看到问题了吗?

注释-- process in PHP instead?中的问号被解释为将参数绑定到的令牌!PDO期望三个参数,而不是传递的两个参数。

现在,很明显,简单的解决方案是重写评论,但这感觉我在避免可能更大的问题。

PDO可能有什么问题吗,或者我可以设置一个选项让它理解MySQL注释吗?

您可以有注释,但不能有包含?的注释或其他类似:x的内容,这些内容将被解释为占位符。

PDO不理解SQL语法。它将所有文本视为需要检查占位符的内容。当模拟准备好的语句时,会发生这种情况。