如何在MySQL数据库中存储JSON字符串

时间:2012-01-24 16:52:53

标签: php mysql json

我使用下面的代码将JSON数据存储在MySQL表中。如果JSON很短但是中断较长的文本,它可以正常工作。 “field_json”是LONGTEXT。

$sql = sprintf("UPDATE mytable 
    SET field_json = '$json_string'
    WHERE id = $userid");
$result = mysql_query($sql);

我得到的错误是:

  

查询无效:您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以获得正确的语法   在'G附近使用   ' “ ”用户名“: ”C0WB0Y“, ”姓氏“: ”“, ”ID“:31874363},{ ”pathToPhoto“:” 22960 /辐透'   在第2行

4 个答案:

答案 0 :(得分:21)

使用占位符,否则您很容易受到SQL注入:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

否则,这是一个快速修复:http://php.net/manual/en/function.mysql-real-escape-string.php

$sql = sprintf(
        "UPDATE mytable SET field_json = '%s' WHERE id = '%s'",
        mysql_real_escape_string($json_string),
        mysql_real_escape_string($userid)
);
$result = mysql_query($sql);

修改

请使用PDO(http://www.php.net/manual/en/book.pdo.php)。截至5.5

,已弃用mysql扩展程序

答案 1 :(得分:4)

转义JSON字符串:

$json_string = mysql_real_escape_string( $json_string);

$sql = sprintf("UPDATE mytable 
    SET field_json = '$json_string'
    WHERE id = $userid");
$result = mysql_query($sql);

答案 2 :(得分:3)

您需要转义JSON字符串中的引号 - 否则它们会终止SQL查询,从而导致您获得异常。

答案 3 :(得分:2)

试试这个

    $json_string = mysql_real_escape_string( $json_string );
    $sql = sprintf("UPDATE mytable 
    SET field_json = '$json_string'
    WHERE id = $userid");
    $result = mysql_query($sql);