Как сохранить строку JSON в MySQL db

Я храню данные 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», «username»: «C0WB0Y», «lastName»: «", "id": 31874363}, {"pathToPhoto": " 22960 / фото 'в строке 2

Используйте держатели мест, иначе вы восприимчивы к 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 ). Расширение mysql устарело от 5.5

Вам нужно избегать кавычек в вашей строке JSON, иначе они завершат SQL-Query, в результате чего вы получите исключение.

Побег строки 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); 

попробуй это

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