tokmaganbet
@tokmaganbet

Можно ли использовать функции внутри SQL запроса?

<?php
$login = filter_var(trim($_POST['login']),
    FILTER_SANITIZE_STRING);
$password = filter_var(trim($_POST['password']),
    FILTER_SANITIZE_STRING);

$mysql = new mysqli('localhost', 'root', '', 'register');
$result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND 'password_verify($password, `password`)' = 1");

$mysql->close();
$user = $result->fetch_assoc();
if(count($user) == 0) {
    echo 'Не было найдено такого пользователя';
    exit();
}


Как проверить пароль используя password_verify() ?
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
Нюансы при использовании функций SQL языка:
  • Какая-то часть бизнес логики уходит в неконтролируемые вещи вроде SQL. Пароль лучше точно проверять не функцией SQL, а функцией PHP. В таком случае код будет полностью соответствовать бизнес требованием и тесты не будут работать с базой.
  • Использование SQL функций в запросах игнорирует индексы. Поэтому на больших данных и сложных запросах время работы такого запроса может увеличиться.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$mysql = new mysqli('localhost', 'root', '', 'register');
$stmt = $mysql->prepare("SELECT `password` FROM `users` WHERE `login` = ?");
$stmt->bind_param('s', $login);
$stmt->execute();
$stms->bind_result($hash);
if (!$stmt->fetch() || !password_verify($password, $hash)) {
  echo 'Error';
}
Ответ написан
Комментировать
@qid00000000
Мало что знаю, но информацию найду в гугле
Использовать функции конечно можно, но только встроенные ( как я понял, тут речь о php функциях).

Пароли, в большинстве случаев, кодируются MD5() функцией. Советую не изобретать велосипед, если оно того не стоит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы