【发布时间】: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