在执行一条准备好的语句并通过绑定参数插入一个'{}'::jsonb
之类的jsonb值时,出现此错误:
SQLSTATE[22P02]: Invalid text representation: 7 ERROR: invalid input syntax for type json
DETAIL: Token "'" is invalid.
CONTEXT: JSON data, line 1: '...
我使用单引号'
来描述字符串文字,然后通过jsonb
将其转换为'string literal'::jsonb
类型。但是使用准备好的语句,它不起作用,并且会引发上述错误。我在做什么错了?
字符串本身没有任何单引号。唯一的单引号是用于包装字符串的单引号。
字符串本身是使用以下代码对PHP数组进行编码的结果:
json_encode($array, JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_TAG)
<?php
$stm = $pdo->prepare("INSERT INTO t (val) VALUES (:val)");
$stm->execute($stm, [':val' => "'{}'::jsonb"]);