PostgreSQL json select PHP Yii2 中的查询替换
PostgreSQL json select query replacement in PHP Yii2
在 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 ""
LINE 1: SELECT * FROM my_table WHERE my_column & 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 编辑器中有效。
转义 SQL 字符串可能是缺少的内容。所以这样的事情应该理想地工作:
SELECT * FROM service WHERE test2 \?& array['2', '1', '3', '4'];
作为一个快速的临时解决方案,我使用了 pg_query
$host = "localhost";
$user = "test";
$pass = "test";
$db = "test";
$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
or die("Could not connect to server\n");
//my_column type is jsonb
$query = "SELECT * FROM my_table WHERE my_column ?& array['2', '1', '3']";
$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");
$data = array();
while ($row = pg_fetch_assoc($rs)) {
$data[] = $row;
}
echo "<pre>";
print_r($data);
pg_close($con);
但我找不到让它与 Yii2
一起工作的方法。希望这对其他人有帮助。
在 PostgreSQL 中,?
是 jsonb_exists()
函数的别名。 ?&
是 jsonb_exists_all()
的别名。所以,你可以这样写你的查询:
SELECT * FROM my_table WHERE jsonb_exists_all('my_column', array['2', '1', '3', '4']);
在 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 ""
LINE 1: SELECT * FROM my_table WHERE my_column & 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 编辑器中有效。
转义 SQL 字符串可能是缺少的内容。所以这样的事情应该理想地工作:
SELECT * FROM service WHERE test2 \?& array['2', '1', '3', '4'];
作为一个快速的临时解决方案,我使用了 pg_query
$host = "localhost";
$user = "test";
$pass = "test";
$db = "test";
$con = pg_connect("host=$host dbname=$db user=$user password=$pass")
or die("Could not connect to server\n");
//my_column type is jsonb
$query = "SELECT * FROM my_table WHERE my_column ?& array['2', '1', '3']";
$rs = pg_query($con, $query) or die("Cannot execute query: $query\n");
$data = array();
while ($row = pg_fetch_assoc($rs)) {
$data[] = $row;
}
echo "<pre>";
print_r($data);
pg_close($con);
但我找不到让它与 Yii2
一起工作的方法。希望这对其他人有帮助。
在 PostgreSQL 中,?
是 jsonb_exists()
函数的别名。 ?&
是 jsonb_exists_all()
的别名。所以,你可以这样写你的查询:
SELECT * FROM my_table WHERE jsonb_exists_all('my_column', array['2', '1', '3', '4']);