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