pdo 并插入 json 编码到 json 字段

Posted

技术标签:

【中文标题】pdo 并插入 json 编码到 json 字段【英文标题】:pdo and inserting json encoded to json field 【发布时间】:2018-07-18 09:16:23 【问题描述】:

我一直在关注本指南...mysqltutorial.org/mysql-json

...我决定用 PDO 尝试这些概念...但我一定在某个地方丢失了一些东西。

这很好用:

$db = new PDO ("mysql:host=$hostname;dbname=$dbname", $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$array=array(1=>array(2=>'kkk',3=>'pizza'));
$json= json_encode($array); 

$db->query("INSERT INTO test(config) VALUES('".$json."');");

但这不是:

$db = new PDO ("mysql:host=$hostname;dbname=$dbname", $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$array=array(1=>array(2=>'kkk',3=>'pizza'));
$json= json_encode($array); 

$sql = "INSERT INTO test (config) VALUES(':config');";
$stmt = $db->prepare($sql);
$stmt->bindParam(':config', $json, PDO::PARAM_STR);

$stmt->execute();

第二个返回这个错误:

SQLSTATE[22032]: <>: 3140 Invalid JSON text: "Invalid value." at position 0 in value for column 'test.config'.

$json 上的 var_dump:

page.php:18:string '"1":"2":"kkk","4":"pizza"' (length=29)

我做错了什么?没看懂。

【问题讨论】:

【参考方案1】:

您不要在占位符周围加上引号。如果你引用它,它会尝试插入该文字字符串,而不是用来自bindParam() 的值替换它。

$sql = "INSERT INTO test (config) VALUES(:config);";

【讨论】:

嗯...声明是从另一个指南粘贴的,我之前尝试从占位符中删除引号,但没有任何改变。现在我又试了一次,它起作用了。谁知道我做了什么。谢谢!

以上是关于pdo 并插入 json 编码到 json 字段的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP PDO 解码后将整个 JSON 插入数据库

PHP Json 编码 PDO::FETCH_ASSOC

PDO json插入多个标签

如何使用 PHP PDO 在 mySQL 中插入多行 JSON 对象数据?

json常见问题汇总

Kafka Connect 转换:从 json 字段中提取 Long 值并作为键插入