Как предотвратить удаление апострофа PHP MySQL

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

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

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

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


person thisisready    schedule 25.11.2010    source источник
comment
Это... удалить его? Серьезно?   -  person Ignacio Vazquez-Abrams    schedule 25.11.2010


Ответы (3)


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

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

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

person Jacco    schedule 25.11.2010
comment
+1 за указание людям на PDO. Серьезно, старая библиотека mysql такая 90-х: D - person El Yobo; 25.11.2010

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

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

person Pekka    schedule 25.11.2010

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

person Mason Barge    schedule 01.10.2011