代码之家  ›  专栏  ›  技术社区  ›  Gwen Hufschmid

pdo并将json编码插入json字段

  •  3
  • Gwen Hufschmid  · 技术社区  · 8 年前

    我在遵循这个指南。。。 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\u转储:

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

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

    1 回复  |  直到 8 年前
        1
  •  5
  •   Barmar    8 年前

    占位符周围不能加引号。如果您引用它,它会尝试插入该文本字符串,而不是将其替换为 bindParam() .

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