我使用下面的代码将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行
答案 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);