我也有同样的问题!我试图绕过字符“?”之间的混淆。在列(字段)名称和相同的字符“?” 作为PDO中的位置(未命名)占位符,通过切换到命名参数绑定......但问题仍然存在:(
现在,PDO 看到“?” 在列名中,并认为我混淆了命名参数和位置参数!
例如:
UPDATE myTable SET `title` = :title, `Underwater?` = :Underwater
WHERE ID='123'
连同以下绑定:
Array ( [:title] => test [:Underwater] => 0)
产生以下错误消息:
"SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters"
请注意,我避免放置任何“?” 在占位符本身内部(它是":Underwater"而不是":Underwater?",但这无济于事......)
显然,这是一个错误!PDO 看到“?” 在列名中,并得出结论,它是一个位置占位符,即使我们严格使用 NAME 参数绑定!
我看看能不能报告这个bug...
由于 MySQL 允许在列名中使用问号,我看不出我们必须避免使用问号的令人信服的理由!(虽然,在短期内,我会这样做,叹息......)