2010-11-25 4 views
0

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

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

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

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

+1

Это ... * удаление * это? *Шутки в сторону*? – 2010-11-25 10:22:02

ответ

7

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

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

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

+0

Почему downvote? – Jacco 2010-11-25 11:09:54

0

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

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

0

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

Смежные вопросы