簡體   English   中英

pdo並將json編碼插入到json字段中

[英]pdo and inserting json encoded to json field

我正在按照這個指南... 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);";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM