#javascript #php #mysql #json
#javascript #php #mysql #json
Вопрос:
я должен хранить содержимое html в базе данных как json вместе с другими данными. когда я получаю определенные данные html в javascript, я переношу их в объект вместе с другими данными и преобразую его в строку json, которая применяет escape «, что позволяет избежать любых конфликтов. когда я передаю данные с помощью AJAX в php и вставляю их в MYSQL, в таблице базы данных нет выхода » и поэтому, когда я считываю данные и пытаюсь десериализовать, он выдает ошибку из-за недопустимого json (как на php, так и на js)/
когда я конвертирую в json с помощью js, у меня есть что-то вроде
{"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. я проверил json в последний момент вставки в php, и все в порядке.
РЕДАКТИРОВАТЬ: 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 ;
}
Комментарии:
1. Покажите PHP-код, взаимодействующий с базой данных. Используете ли вы параметризованные запросы? Вероятно, вы этого не делаете, и это проблематично несколькими способами. Это также может объяснить вашу текущую проблему, так как также является escape-символом в MySQL.
2. я отредактировал свой вопрос… а также удалите некоторый код, который является бессмысленным для этого способа, чтобы избежать путаницы. я генерирую запрос, за которым следует итерация для каждого элемента, который нужно вставить, чтобы получить запрос с несколькими наборами значений
3. Да, это именно то, что я подумал, вы используете конкатенацию строк для получения значений в запросе. Это нехорошо, поскольку может привести к забавным результатам (например, к проблеме, которая у вас есть) и делает программу уязвимой для атак SQL-инъекций. Перепишите его, чтобы использовать параметризованные запросы.
4. В MySQL символ shash является символом кавычек по умолчанию. Если вы хотите использовать его как обычный, вы должны либо заключить его в кавычки (т. Е. Удвоить), либо определить другой символ кавычек (ESCAPE-символ) в операторе (если оператор поддерживает).
Ответ №1:
Просто используйте addslashes()
для экранирования кавычек, прежде чем вставлять их в базу данных. При извлечении вы можете использовать stripslashes()
функцию извлечения исходной строки.
Комментарии:
1. это также работает для добавления addslashes() перед вставкой, однако решение @sticky bit более элегантно