【发布时间】:2016-07-10 11:09:12
【问题描述】:
注意:
这个问题可以被认为是这个Question的重复。 它确实指出了 PDO 的相同问题。但由于目标不同,它的变通解决方案略有不同。我将在那里发布 JSONB 的解决方法和 PHP 票证的链接。
当我准备以下查询时:
SELECT * FROM post WHERE locations ? :location;
出现以下警告:
警告:PDO::prepare(): SQLSTATE[HY093]: 无效参数号:/path/file.php 第 xx 行中的混合命名参数和位置参数
问号是有效的PostgreSQL operator,但 PDO 将其视为占位符。
是否有适当的方法来配置 PDO 以忽略作为占位符的问号?
我将在下面发布一个解决方法。希望有更好的方法
编辑 我在 PHP 错误跟踪系统中添加了 ticket
【问题讨论】:
-
已经被问过几次了,例如stackoverflow.com/questions/16311939/… 没有好的答案。
-
@AlexBlex,是的,不是的。我读了那个问题(和其他几个),但它不一样。检查我的解决方法。我会在 PHP PDO 开一张票来解决这个问题
-
实际上,问题和答案在我看来都是重复的——mikl 使用了
?运算符(在这种情况下,在 hstore 上而不是 json 上)并且 Craig Ringer 建议使用函数作为解决方法(看起来实现操作符的内置函数,而不是创建一个新函数)。 -
BTW 不确定 PHP/PDO 但尝试删除列名和运算符之间的空格:
WHERE locations? :location; -
@Abelisto 不幸的是,根据我的测试,PDO 的解析器太聪明了,仍然可以发现
?。
标签: php postgresql pdo