MySQL и PHP вдруг чувствительны к регистру? - PullRequest
1 голос
/ 19 января 2011

По сути, я изменил что-то в своем коде входа php, и теперь, когда я вхожу, MySQL требует, чтобы регистр совпадал?!

    $match = "select * from users where username = '".$username."' and password = '".$password."';";

    echo $match;

Если CaSe моего имени пользователя не совпадает с базой данных, то он не возвращает никаких строк.

Если пользователь регистрируется как ADMIN, то я хочу, чтобы он мог войти в систему как "admin" или "AdMiN" и т. Д. Есть идеи?

Большое спасибо:)

1 Ответ

8 голосов
/ 19 января 2011

Сортировка для этого столбца изменилась, я думаю.См. эту страницу MySQL о чувствительности к регистру при сравнении строк , чтобы узнать больше.Чтобы оградить себя от подобных проблем, что-то вроде:

$match = "select * from users where UPPER(username) = '".strtoupper($username)."' and password = '".$password."';";

- обычный трюк.Однако, как заметили другие, понимание того, как сортировка работает в базе данных и ее правильное использование, является лучшим решением.Правильное сопоставление базы данных и ее использование должны позволить базе данных использовать любой индекс для столбца имени пользователя, а не сканировать таблицу.

А также убедитесь, что вы избегаете SQL-инъекций Атаки - что происходит в вашем текущем коде, если пользователь вводит имя пользователя, содержащее одинарную кавычку?

Вы также можете рассмотреть, какие символы вы разрешите использовать в качестве имен пользователей, и какой набор символов вы используете- действительно ли «René» является действительным именем пользователя?Будет ли он успешно проходить через ваш интерфейс, через базу данных и возвращаться беспрепятственно из-за проблем с набором символов? Отличная статья Джоэла Спольски о Unicode , вероятно, стоит прочитать в какой-то момент.

...