Проблема (с?)
На мой взгляд, есть несколько проблем с вашим кодом.Я постараюсь обратиться к каждому из них и рассказать, как решить каждую проблему.
Проблема № 1: Вы используете REGEX для удаления своего кода.
Есть намного лучшие альтернативы, лучшиеиз которых подготовленные заявления , которые вы, очевидно, должны использовать.К сожалению, функции mysql_*
не поддерживают это.Это заставляет меня перейти к следующей проблеме:
Проблема № 2: Вы используете mysql_*
функции.
Вы не должны использовать такие функции, как mysql_query()
и mysql_num_rows()
, вместо этого,рассмотрите возможность перехода на более качественную и безопасную альтернативу, такую как MySQLi (Хорошо) или PDO (Отлично).
Подготовленный оператор автоматически экранируется, и любой вредоносный код или символы становятся бесполезными, то же самое относится и к инъекциям SQL.Вам следует использовать более качественный обработчик базы данных, который его поддерживает (см. Проблема №2).
Проблема №3: Вы проводите специальное тестирование.
Вы, кажется, тестируете, только если число строк равноточно один.Но что, если есть (случайно) 2?Вместо проверки того, что должно быть, проверьте, что должно быть , а не :
if ($existCount != 0) { ...
Проблема № 4: Вы не выбираете правильные поля.
Вы выбираете толькоid
поле в вашем запросе, где вместо этого вы должны выбрать все соответствующие поля (например, имя пользователя и пароль) для получения информации.
Проблема № 5: Вы не используете безопасное хранение.
Если бы кто-то украл вашу базу данных, у него был бы легкий доступ ко всем вашим паролям.Попробуйте использовать метод шифрования, такой как sha1()
.
Проблема № 6: Вы не проверяете ошибки.
Ошибки могут и будут возникать, вы должны проверить их, с mysql_query()
вы, вероятно, должны сделать что-то вроде
mysql_query("SELECT....") or die(mysql_error());
В PDO это будет что-то вроде
if (!$stmt->execute()) { throw new Exception("Execution failed.` . var_export($stmt->errorInfo(), true)); }
Попробуйте исправить это и сообщите нам, если ваша проблемасохраняется.
Удачи:)