【问题标题】:mysql ignore \" on json insertionmysql 在 json 插入时忽略 \"
【发布时间】:2020-12-01 12:45:28
【问题描述】:

我必须将 html 内容作为 json 与其他数据一起存储在数据库中。当我在javascript中获取某些html数据时,我将它与其他数据一起包装到一个对象并将其转换为json字符串,该字符串应用转义“避免任何冲突。当我通过AJAX将数据传递给php并将其插入MYSQL时,在数据库表没有转义”,因此当我读取数据并尝试反序列化时,由于 json 无效(在 php 和 js 上)而出错/

当我通过 js 转换为 json 时,我有类似的东西

{"cat":"education-content","id":"45a93325-2bab-4296-cc8d-92e7994dabe0","contents":"<p><span style=\"background-color: rgb(224, 62, 45);\" data-mce-style=\"background-color: #e03e2d;\">شستنیتشنسذیت سشای تشس ایتنشسا تینشاسنتیاستشن ایتنشس ایتنش</span></p><p><span style=\"color: rgb(22, 145, 121);\" data-mce-style=\"color: #169179;\">شتسنیاتشسایتنشساتینشساتیناشس یاشست نیاتنشس </span></p><p><span style=\"font-size: 14pt;\" data-mce-style=\"font-size: 14pt;\"><strong>سشیتاشتنسیاش</strong></span></p><p><br data-mce-bogus=\"1\"></p>"}

但在数据库表中它存储为

{"cat":"education-content","id":"45a93325-2bab-4296-cc8d-92e7994dabe0","contents":"<p><span style="background-color: rgb(224, 62, 45);" data-mce-style="background-color: #e03e2d;">شستنیتشنسذیت سشای تشس ایتنشسا تینشاسنتیاستشن ایتنشس ایتنش</span></p><p><span style="color: rgb(22, 145, 121);" data-mce-style="color: #169179;">شتسنیاتشسایتنشساتینشساتیناشس یاشست نیاتنشس </span></p><p><span style="font-size: 14pt;" data-mce-style="font-size: 14pt;"><strong>سشیتاشتنسیاش</strong></span></p><p><br data-mce-bogus="1"></p>"}

这个json是jquery生成的

 var education_obj={
            cat : cat,
            id : id,
            contents : contents

        };


        var item_wrapp_json = JSON.stringify(education_obj);

这是由ajax传递的。我在插入php的最后一刻检查了json,没关系。

编辑:插入项目的 php 代码。

$citems_query = "INSERT INTO `course_items_tbl`(`CIID`, `CSFK`, `CFK`, `CIORDER`, `CIOPTIONS`) VALUES ";

       

        foreach($data_obj["courseSections"] as $item){


            $sectionID = $item["section_id"];
            $sectionName = $item["section_name"];
            $sectionType = $item["section_type"];



            //$item["section_questions"] this is the json string from js
            foreach($item["section_questions"] as $qitem){

                

                $test = $qitem;

                
                

                
                $citems_query .= "('".$qid."','".$sectionID."','".$course_id."', ". $qorder ." , '".$qitem."' ),";
                
                $qorder++;
            }

【问题讨论】:

  • 显示与数据库交互的 PHP 代码。你使用参数化查询吗?你可能不知道,这在几个方面是有问题的。它也可以解释您当前的问题,因为 \ 在 MySQL 中也是一个转义字符。
  • 我编辑了我的问题...并且还删除了一些对这种方式无意义的代码以避免混淆。我生成查询,然后对要插入的每个项目进行迭代以获取具有多个值集的查询
  • 是的,这正是我的想法,您使用字符串连接将值放入查询中。这不好,因为它可能会产生有趣的结果(例如您遇到的问题)并使程序容易受到 SQL 注入攻击。重写它以使用参数化查询。
  • 在 MySQL 中,斜线符号是默认的引用符号。如果您想将它用作常规,那么您必须引用(即加倍)它或在语句中定义另一个引用符号(ESCAPE 字符)(如果语句支持)。

标签: javascript php mysql json


【解决方案1】:

只需使用addslashes() 转义引号,然后再将其插入数据库。在获取时,您可以使用stripslashes() 检索原始字符串。

【讨论】:

  • 这也可以在插入之前添加 addlashes() 但是@sticky bit 解决方案更优雅
猜你喜欢
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 2012-08-11
  • 2012-06-09
  • 2019-02-16
  • 1970-01-01
相关资源
最近更新 更多