Как предотвратить удаление апострофа PHP MySQL - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть система регистрации, которая запрашивает имя пользователя. У некоторых людей есть апостроф в их фамилии, и это предотвращает запись данных в таблицу базы данных MySQL (например, O'Hare).

Я использую mysql_real_escape_string, которая удаляет апостроф из строки. Это было бы хорошо, за исключением того, что мне нужно использовать значение с апострофом для веб-службы, в противном случае веб-служба вернет false.

Я думал, что смогу проверить имя с помощью веб-службы перед использованием mysql_real_escape_string, но может ли это привести к недостатку безопасности? Или веб-службы SOAP уже проводят свои собственные проверки на чистые входные данные?

Или есть лучший способ пройти через переменную, при котором PHP сохраняет апостроф, но сохраняет его в безопасности, и MySQL может принять его?

Ответы [ 3 ]

7 голосов
/ 25 ноября 2010

Вы должны показать нам некоторый код, потому что mysql_real_escape_string не удалит апостроф, а только избежит их.
Экранирование означает, что O'Hare станет O\'Hare, поэтому его можно вставить в виде строки: 'O\'Hare'. После извлечения из базы данных ваше значение все равно должно быть оригинальным O'Hare.

Итак, если апостроф 'потерян', вероятно, есть ошибка где-то еще в логике вашей программы.

Другой вариант - переключиться с использования библиотеки MySQL на библиотеку MySQLi или PDO для доступа к вашей базе данных. Последние два поддерживают подготовленные заявления. Подготовленные операторы обычно считаются наилучшей практикой для запросов к вашей базе данных.

0 голосов
/ 01 октября 2011

Перед использованием mysql_real_escape_string необходимо открыть соединение с базой данных, иначе оно будет работать неправильно.

0 голосов
/ 25 ноября 2010

mysql_real_escape_string() не удалит апострофы.

Возможно, ваша проблема связана с выходом, или какая-то другая функция работает с входом.

...