php - pdo 并将 json 编码插入到 json 字段

标签 php mysql json pdo

我正在按照本指南... 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)

我做错了什么?我不明白。

最佳答案

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

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

关于php - pdo 并将 json 编码插入到 json 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48674701/

相关文章:

mysql - 如何为列值的组合选择行

python - 发送二进制数据作为响应的最有效方式(时间和空间方面)

php - 要将我的 Codeigniter PHP Web 应用程序转换为 iOS 应用程序,我应该做的第一件事是什么?

php - 使用存储对数组进行排序

php - 我们真的可以免受 CSRF 攻击吗?

mysql - 如何在 MySQL shell 中通过循环插入行(无 PHP)

php - 异步聊天

javascript - CSV 文件到 Javascript 中的 Json

javascript - 用于从 url 中提取不带扩展名的文件名的正则表达式

php - kohana 中的数组到对象