我有这个 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 ...
关于php - 将 JSON 插入 MySQL 表时转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50570083/