相关疑难解决方法(0)

在PostgreSQL中使用PDO时如何忽略问号作为占位符

注意:

该问题可视为本课题的副本.它确实指出了与PDO相同的问题.但它的解决方案解决方案有点不同,因为目标不同.我将在那里发布JSONB的解决方法和PHP票证的链接.

当我准备以下查询时:

SELECT * FROM post WHERE locations ? :location;
Run Code Online (Sandbox Code Playgroud)

发生以下警告:

警告:PDO :: prepare():SQLSTATE [HY093]:参数号无效:在xx行的/path/file.php中混合命名和位置参数

问号是一个有效的PostgreSQL运算符,但PDO将其视为占位符.

是否有一种正确的方法来配置PDO以忽略问号作为占位符?

我会发布一个下面的解决方法.希望有更好的方法

编辑 我在PHP bug跟踪系统中添加了一个票证

php postgresql pdo

10
推荐指数
2
解决办法
846
查看次数

查询对象数组(带有 JSONB 的 Postgres、Laravel 5)

我在 JSONB 字段中获取了以下数据:

\n\n
[\n    \'first_name\' => \'Philipp\',\n    \'last_name\' => \'K\xc3\xbchn\',\n    \'size\' => 170,\n    \'hobbies\' => [\n      \'daily\' => \'beer\',\n    ],\n    \'skills\' => [\n      \'drink beer\',\n      \'drink more beer\',\n    ],\n]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我对 Laravel 和 Postgres 还很陌生,所以我想做一些基本的查询。

\n\n

以下是一些运行良好的查询:\n(json 是列的名称)

\n\n
$users = User::whereRaw("json ->> \'first_name\' = \'Philipp\'")->get();\n\n$users = User::whereRaw("json ->> \'size\' > \'160\'")->get();\n\n$users = User::whereRaw("json #>> \'{hobbies, daily}\' = \'beer\'")->get();\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我想检查是否drink beerskills并且以下代码不起作用:

\n\n
$users = User::whereRaw("json -> \'skills\' ? \'drink beer\'")->get();\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里我遇到了一个语法错误:

\n\n
SQLSTATE[42601]: …
Run Code Online (Sandbox Code Playgroud)

php postgresql laravel jsonb laravel-5

6
推荐指数
1
解决办法
1万
查看次数

查询中的问号运算符

在我的laravel 5应用程序中,我使用的是PostgreSQL的jsonb数据类型,它有?运算符.

但是我无法在我的模型中使用它,因为laravel使用问号作为绑定.

具体来说,在whereRaw()方法中:

$query->whereRaw("jsonb_column ? 'a_key'")
Run Code Online (Sandbox Code Playgroud)

如何在查询中使用问号?

php postgresql laravel laravel-5

5
推荐指数
2
解决办法
2096
查看次数

使用“?|”执行查询 操作员

我有my_table带有jsonb列的表sentiments。我需要从此列中删除所有键“10216”和“10191”。

我尝试在 Laravel 中做下一步:

DB::table('my_table')
    ->whereRaw("sentiments ?| ARRAY['10216', '10191']")
    ->update([
        'sentiments' => DB::raw("sentiments - '10216' - '10191'")
    ]);
Run Code Online (Sandbox Code Playgroud)

但我有下一个错误:

[Illuminate\Database\QueryException]                                                                                 
  SQLSTATE[42601]: Syntax error: 7 ??????:  ?????? ?????????? (????????? ?????????: "$1")                              
  LINE 1: ...= sentiments - '10216' - '10191' where sentiments $1| ARRAY[...                                           
                                                               ^ (SQL: update "my_table" 
    set "sentiments" = sentiments - '10216' - '10191' 
    where sentiments ?| ARRAY['10216', '10191'])
Run Code Online (Sandbox Code Playgroud)

因为正如我所看到的“?” 看起来像参数。如何逃避这个符号?

更新

我也试着写两个问题sentiments ??| ARRAY::

[Illuminate\Database\QueryException]                                                                                 
  SQLSTATE[42883]: Undefined function: 7 ??????:  ???????? …
Run Code Online (Sandbox Code Playgroud)

php postgresql pdo laravel laravel-5.3

0
推荐指数
1
解决办法
461
查看次数

标签 统计

php ×4

postgresql ×4

laravel ×3

laravel-5 ×2

pdo ×2

jsonb ×1

laravel-5.3 ×1