- 最近在使用postgresql数据库的json格式,发现pdo查询报错
- 源码如下
<?php
// 使用PDO链接
$pdo = new PDO("pgsql:host=127.0.0.1;port=5432;dbname=postgres","postgres","");
$statement = $pdo->prepare("select * from test where account::jsonb ? '111'");
$statement->execute();
var_dump($statement->errorInfo());
$rs = $statement->fetch();
var_dump($rs);
// 原生链接 查询
$p = pg_connect("host=127.0.0.1 port=5432 dbname=postgres user=yluchao password=''");
$rs = pg_query($p, "select * from test where account::jsonb ? '111'");
var_dump(pg_fetch_all($rs));
/*create table test
(
id bigserial primary key,
account jsonb not null default '{}',
name varchar(255) not null default ''
);*/
如图 使用pdo查询报错,使用原生的pgsql链接则可以查询
在PHP中
PDO::prepare
里包含?
就表示是占位符。直接使用PDO::query
就不会有这个问题。其实关于这个问题,官方早就有回复:https://bugs.php.net/bug.php?...
解决方案:关闭本地模拟预处理
或者
http://php.net/manual/en/pdo....
PHP 默认开启本地模拟,关闭ATTR_EMULATE_PREPARES后会将prepare操作发送到数据库服务器由数据库服务器来进行操作。