Please note that this example is vulnerable to injection and uses plain-stored passwords...
(PHP 5, PHP 7, PHP 8)
mysqli::real_query -- mysqli_real_query — Выполнение SQL запроса
Объектно-ориентированный стиль
Процедурный стиль
Выполняет одиночный запрос к базе данных, результаты которого можно получить или использовать функциями mysqli_store_result() или mysqli_use_result().
Вместо составления строки запроса с включением переменных значений необходимо подготавливать запросы. Либо строки запроса должны быть экранированы функцией mysqli_real_escape_string() и правильно отформатированы.
Чтобы определить, должен ли запрос возвращать результирующий набор, смотрите mysqli_field_count().
mysql
Только для процедурного стиля: объект mysqli, который вернула функция mysqli_connect() или функция mysqli_init().
query
Текст запроса в виде строки.
Возвращает true
в случае успешного выполнения или false
в случае возникновения ошибки.
Если уведомления об ошибках mysqli включены (MYSQLI_REPORT_ERROR
) и запрошенная операция не удалась,
выдаётся предупреждение. Если, кроме того, установлен режим MYSQLI_REPORT_STRICT
,
вместо этого будет выброшено исключение mysqli_sql_exception.
Please note that this example is vulnerable to injection and uses plain-stored passwords...
Well, we don't know if $password is in plain text because it was never defined in the example.
New passwords should be stored using
<?php
$crypt_pass = password_hash($password, PASSWORD_DEFAULT);
?>
Where PASSWORD_DEFAULT = BCRYPT algorithm
Then to compare a user entered password to a database stored password, we use:
<?php
$valid = password_verify($password, $crypt_pass);
?>
Which returns true or false.
As for being vulnerable to injection, this is true. To avoid this, use sprintf() or vsprintf() to format the query and inject the values using mysqli::real_escape_string, like so:
<?php
$vals = [$db->real_escape_string($username), $db->real_escape_string($password)];
$query = vsprintf("Select * From users Where username='%s' And password='%s'", $vals);
$result = $db->real_query($query);
?>
Straightforward function - simply connect to the database and execute a query, similar to this function bellow.
<?php
function check_password($username, $password) {
// Create connection
$db = new mysqli('localhost','database_user','database_pass','database_name');
// Check for errors
if($db->connect_errno){
echo $db->connect_error;
}
// Execute query
$result = $db->real_query("Select * From users Where username='$username' And password='$password'");
// Always check for errors
if($db->connect_errno){
echo $db->connect_error;
}
return $result == true;
}
?>
Very easy.
Replace database_user, database_pass and database_name with the proper names, and the text inside real_query with your actual query.
Don't forget the quotes on either side (except for numbers, there you can omit them) otherwise it won't work. Hope that helps someone.