Yii2,ActiveQuery,Postgresql:SQLSTATE [HY093]:参数号无效:混合名称和位置参数

时间:2018-02-11 14:05:50

标签: php postgresql pdo yii2

我收到了一个查询

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","");

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我无法测试这个,因为我没有运行postgre sql,但看起来最后一个语句不太正确。我认为表名和字段需要在括号中。您可以这样说,因为Yii2没有正确引用字段名称。你也混合了两组单引号括号,虽然你已经正确地转义了单引号,但是php经常不喜欢它们。试试这样嵌套它们;

$query->andWhere(new Expression("(profile).photo::jsonb ? \'id\'"));

正如我所说,我无法测试,但希望它对你有用