【发布时间】:2015-06-19 13:04:44
【问题描述】:
在 PHP Yii2 中这个查询有什么替代品吗?
SELECT * FROM my_table WHERE my_column ?& array['2', '1', '3', '4'];
my_column = jsonb
因为我得到了这个错误
Error Info: Array
(
[0] => 42601
[1] => 7
[2] => ERROR: syntax error at or near "$1"
LINE 1: SELECT * FROM my_table WHERE my_column $1& array['2', '1', '3', '...
^
)
我正在使用 PHP Yii2 和 PostgreSQL 9.4:
$sql = "SELECT * FROM my_table WHERE my_column ?& array['2', '1', '3', '4'];";
$model = TestModel::findBySql($sql)->asArray()->all();
此查询的目的是比较数据库中是否存在该值。
数据库有:
["1", "2", "3", "4"]["1", "2", "3"]
它可以在 pgAdmin3 SQL 编辑器中使用。
【问题讨论】:
-
PostgreSQL 喜欢使用带编号的占位符(即
$1、$2、...),因此 PHP 中的某些东西将?&中的?转换为$1,就好像 @ 987654333@ 是一个占位符。这就是奇怪的$1的来源。对 PHP 接口了解不够,无法告诉您如何修复它,抱歉。 -
最初的想法是将
$sql 包裹在yii\db\Expression中,但似乎没有帮助。
标签: php json postgresql yii2 postgresql-9.4