<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Регистрозависимый поиск для MySQL

Регистрозависимый поиск для MySQL

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

Чтобы стало понятно, о чём идёт речь, давайте сразу приведу пример SQL-запроса:

SELECT * FROM `users` WHERE `login`='admin'

Данный запрос вернёт пользователя с логином "admin". Однако, всё не совсем не так. Если будет пользователь "Admin" (или, например, "AdMiNM"), то он также будет результирующим.

На практике такой ошибки не будет. Если Вы всё правильно сделали (хотя бы поставили UNIQUE на соответсвующее поле), то такие значения как "admin" и "Admin" никогда вместе не будут. Поэтому в данном случае, регистрозависимая выборка вовсе не нужна.

А вот разберём другой пример. Допустим, у Вас в базе хранятся открытые пароли (это очень плохо, но допустим), и Вы хотите провести авторизацию пользователя. Предположим, что у пользователя "admin" пароль "myPassWord". Однако, пользователь вводит такой пароль: "mypassword". В результате получится такой SQL-запрос:

SELECT * FROM `users` WHERE `login`='admin' AND `password`='mypassword'

Так как регистр по умолчанию не учитывается, следовательно, такой пользователь будет найден и пароль совпадёт, чего быть не должно, так как если регистр логина не важен, то вот регистр пароля обязательно надо учитывать.

Проблема решается с помощью BINARY. Если указать данный оператор в запросе, то следующие за ним строки будут регистрозависимые. Это работает по следующей причине: все дальнейшие строки после BINARY будут переведены в двоичный код. А код для верхнего и нижнего регистра различается. Следовательно, операция сравнения, если строки не совпадают с точностью до регистра, вернёт false, поскольку их двоичный код различен. Для нашего с Вами примера вот этот запрос будет верным:

SELECT * FROM `users` WHERE `login`='admin' AND BINARY `password`='mypassword'

Вот теперь, если пароль будет введён без учёта регистра, то будет ошибка авторизации. Как можно увидеть, BINARY стоит перед паролем, следовательно, в логине регистр учитываться не будет, а в пароле регистр будет учтён. Именно так и должно быть.

Вот таким несложным способом делается регистрозависимые поиск и выборка для MySQL.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (3):

DENISSISS DENISSISS 20.04.2012 18:11:40

Написал небольшую проверку регистрозависимой выборки... проверка логина и пароля пользователя) Это на память как пример моей первой работы с БД) Код формы: <form id="form1" name="form1" method="post" action="index.php"> <p> <label> <input type="text" name="login" id="login" /> </label> </p> <p> <input type="password" name="pass" id="pass" /> </p> <p> <input type="submit" name="submit" id="submit" value="Отправить" /> </p> </form> Код php: <?php $mysqli = @new mysqli('localhost', 'user', 'user', 'bd'); //подключение к таблице if (mysqli_connect_errno()) { echo "Подключение невозможно: ".mysqli_connect_error(); } else { echo "Подключение успешно выполнено. "; // $mysqli->query("INSERT INTO `bd`.`bd_test` (`Field1`, `Field2`, `Field3`, `Field4`) VALUES ('555', '', '', '')"); } $result_set = $mysqli->query("SELECT * FROM `users` WHERE `login`='".$_POST[login]."' AND BINARY `password`='".$_POST[pass]."'"); $result_set->num_rows; echo "<br />"; while ($row = $result_set->fetch_assoc()) { echo "Добро пожаловать, "; echo $row[login]; echo "<br />"; echo "Ваш пароль: "; echo $row[password]; echo "<br />"; } echo "<br />"; $result_set->close(); $mysqli->close(); ?>

Ответить

kumakbtu kumakbtu 05.05.2013 11:31:41

В md5() шифрованные пароли 'password' и 'PassWord' не будет одинаковой да?

Ответить

Admin Admin 05.05.2013 11:36:35

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

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.