php - 将 JSON 插入 MySQL 表时转义引号

标签 php mysql json

我有这个 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/

相关文章:

php - 带有链接和 ID 的调用行

c# - 使用 C# 将 UTF8 字符串插入 MySQL

php - jquery json选择问题

MySQL - 更新所有记录以匹配最后一个

java.lang.String 无法转换为 JSONArray

javascript - 如何循环 Sequelize 响应

php - 如何从 JWK key 集中选择有效 key 进行苹果登录 token 验证?

php - 在 HTML 表中格式化 echo 输出

javascript - Laravel,将变量从 Controller 传递到 js 时的不同输出

php - URL RewriteRule .htaccess 以获得更 SEO 友好的形状