Может ли кто-нибудь сказать мне, как вставить специальные символы в базу данных MySQL? Я сделал PHP-скрипт, который предназначен для вставки некоторых слов в базу данных, хотя, если слово содержит ', оно не будет вставлено.
Я могу нормально вставлять специальные символы при использовании PHPmyAdmin, но они просто не работают при их вставке через PHP. Может быть, PHP меняет специальные символы на что-то другое? Если да, есть ли способ заставить их правильно вставить?
Можете ли вы просто вставить часть кода, в которую обрабатывается и вставляется партикулярная переменная? OM The Eternity 06.04.2010
Эта библиотечная функция PHP добавляет обратную косую черту к следующим символам: \ n, \ r, \, \ x00, \ x1a, ‘и". Важная часть состоит в том, что одинарные и двойные кавычки экранируются, потому что это символы, которые, скорее всего, открывают уязвимости.
Пожалуйста, узнайте о sql_injection. Вы можете использовать эту ссылку в качестве Начало
Обратите внимание, что, как указывали другие, mysql_real_escape_string () решит проблему (как и добавляет косые черты), однако вы всегда должны использовать mysql_real_escape_string () из соображений безопасности - рассмотрите:
SELECT * FROM valid_users WHERE username='$user' AND password='$password'
Что делать, если браузер отправляет
user="admin' OR (user=''"
password="') AND ''='"
Запрос становится:
SELECT * FROM valid_users
WHERE username='admin' OR (user='' AND password='') AND ''=''
т.е. проверки безопасности полностью игнорируются.
Использовать для CI htmlentities($this->input->post('control_name'));
Ответ 9 · Community
Например: $ parent_category_name = Мужская одежда Рассмотрим здесь SQL-запрос.
$sql_category_name = "SELECT c.*, cd.name, cd.category_id as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" . $this->db->escape($parent_category_name) . "' AND c.parent_id =0 ";
Ошибка:
Static analysis:
1 errors were found during analysis.
Ending quote ' was expected. (near "" at position 198)
SQL query: Documentation
SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men's Clothing' AND c.parent_id =0 LIMIT 0, 25
MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Clothing' AND c.parent_id =0 LIMIT 0, 25' at line 1
Попробуйте реализовать:
$this->db->escape($parent_category_name)
Вышеупомянутый метод работает на платформе OpenCart. Найдите свой фреймворк и внедрите OR mysql_real_escape_string() в Core PHP
Это будет мужская одежда, то есть в моем случае
$sql_category_name = "SELECT c.*, cd.name, cd.category_id as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" . $this->db->escape($parent_category_name) . "' AND c.parent_id =0 ";
Таким образом, вы получите четкое представление о запросе, реализовав escape () как
SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men\'s Clothing' AND c.parent_id =0
Ответ 10 · Solomon Sudhir
Функция htmlspecialchars - лучшее решение, товарищи. Сегодня я искал, как вставлять строки со специальными символами, и Google выдал так много списков Stackoverflow. Ни один из них не дал мне решения. Нашел на странице w3schools. Да, я мог бы решить свою проблему, используя эту функцию следующим образом:
Я поместил это здесь для использования в будущем. Потратив 20 минут, я решил добавить специальные символы в базу данных. нам не нужно использовать mysql_real_escape_string($holdvalue) так. мы должны сделать это таким образом. $db->real_escape_string($holdvalue). Где $db - сведения о подключении к базе данных. $db = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);.