У меня есть эта строка 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, система работает нормально.
Любая идея, что может быть проблемой здесь?
Это звучит как проблема с кодировкой, но я не знаю, что делать, чтобы ее решить.
Спасибо!
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 ...
MySQLi_
Prepared Statement.