我收到了一个查询
SELECT "user".* FROM "user" LEFT JOIN "profile" ON "user"."id" = "profile"."user_id"
WHERE ("user"."status"='active')
AND (NOT ("user"."id"=1))
AND (profile.photo::jsonb ? 'id')
并收到错误
SQLSTATE [HY093]:参数号无效:混合名称和位置参数\ n 无法准备SQL:SELECT COUNT(*)FROM \“user \”LEFT JOIN \“profile \”ON \“user \”。\“id \”= \“profile \”。\“user_id \”WHERE(\ “user \”。\“status \”=:qp0)AND(NOT(\“user \”。\“id \”=:qp1))AND(profile.photo::jsonb?'id')
所以,如果我运行SQL
JSONObject jsonObject = new JSONObject(response);
//String code = jsonObject.getString("Response");
// or better
String code = jsonObject.optString("Response","");
我做错了什么?
答案 0 :(得分:0)
我无法测试这个,因为我没有运行postgre sql
,但看起来最后一个语句不太正确。我认为表名和字段需要在括号中。您可以这样说,因为Yii2
没有正确引用字段名称。你也混合了两组单引号括号,虽然你已经正确地转义了单引号,但是php经常不喜欢它们。试试这样嵌套它们;
$query->andWhere(new Expression("(profile).photo::jsonb ? \'id\'"));
正如我所说,我无法测试,但希望它对你有用