Экранирование кавычек при вставке JSON в таблицу MySQL

0

У меня есть эта строка JSON, которую я хочу вставить в таблицу. Вот мой запрос на ввод:

$insert_sql = 'INSERT INTO yun_postmeta (post_id, meta_key, meta_value)
    VALUES (5054, "_wc_free_gift_coupon_free_shipping", "a:1:{i:6;a:3:{s:10:"product_id";i:6;s:12:"variation_id";i:0;s:8:"quantity";i:1;}}");';

Конечно, запрос ломается из-за кавычек ("). Когда я добавляю обратную косую черту() перед ними, чтобы бежать, запрос работает, и строка вставляется в таблицу, но по какой-то причине моя система работает неправильно,

Однако, если я копирую строку JSON и вставляю ее вручную в таблицу, используя phpmyadmin, система работает нормально.

Любая идея, что может быть проблемой здесь?

Это звучит как проблема с кодировкой, но я не знаю, что делать, чтобы ее решить.

Спасибо!

  • 3
    Используйте готовые утверждения, и вам не придется беспокоиться о том, чтобы избежать кавычек. Вы можете использовать функции MySQL или PDO.
  • 1
    Кроме того, использование подготовленных операторов позволит избежать проблем с внедрением SQL.
Теги:

1 ответ

0

SQL-запрос должен использовать только одинарные кавычки вокруг значений, т.е.:

VALUES (5054, '_wc_free_gift_coupon_free_shipping', ...

Таким образом, в PHP строка должна быть определена в двойных кавычках, чтобы ограничить количество выходов, а также возможность добавления переменных:

$insert_sql = "INSERT INTO yun_postmeta (post_id, meta_key, meta_value)
VALUES (5054, '_wc_free_gift_coupon_free_shipping', ... )";

Что касается ваших значений, вы должны использовать mysqli_real_escape_string для обработки экранов двойных кавычек: http://php.net/manual/en/mysqli.real-escape-string.php

$escaped_json = mysqli_real_escape_string($con, 'a:1:{i:6;a:3:{s:10:"product_id";i:6;s:12:"variation_id";i:0;s:8:"quantity";i:1;}}');

$insert_sql = "INSERT INTO ... VALUES ( 5054, '_wc_free_gift_coupon_free_shipping', $escaped_json ...
  • 0
    Или используйте MySQLi_ Prepared Statement.
  • 0
    Здравствуйте, вот код, измененный на основе вашего предложения: $ escaped_json = mysqli_real_escape_string ($ conn, 'a: 1: {i: 6; a: 3: {s: 10: "product_id"; i: 6; s: 12 : "variation_id"; я: 0; s: 8: "количество", я: 1;}} '); $ insert_sql = "INSERT INTO yun_postmeta (post_id, meta_key, meta_value) VALUES (4879, '_wc_free_gift_coupon_data', $ escaped_json);"; Я получил следующую ошибку: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ': 1: {i: 6; a: 3: {s: 10: \ "product_id \"; i: 6; s: 12: \ "variation_id \", я: 0; s: 8: \ "количество \";» в строке 2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню