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 — Exécute une requête SQL
Style orienté objet
Style procédural
Exécute une seule requête sur la connexion à la base de données représentée
par le paramètre link
dont le résultat peut être
récupéré ou stocké en utilisant les fonctions mysqli_store_result()
ou mysqli_use_result().
Si la requête contiens des variables d'entrées alors des déclarations préparées paramétrisées devrait être utilisé à la place. Alternativement, les données doivent être correctement formatées et toutes les chaînes de caractères doivent être échappées en utilisant la fonction mysqli_real_escape_string().
Pour déterminer si une requête donnée aurait dû retourner un jeu de résultats ou non, voyez la fonction mysqli_field_count().
mysql
Seulement en style procédural : Un objet mysqli retourné par la fonction mysqli_connect() ou mysqli_init().
query
La requête chaîne de caractères.
Cette fonction retourne true
en cas de succès ou false
si une erreur survient.
Si le rapport d'erreurs mysqli est activé (MYSQLI_REPORT_ERROR
) et que l'opération demandée échoue,
un avertissement est généré. Si, en plus, le mode est défini sur MYSQLI_REPORT_STRICT
,
une mysqli_sql_exception est lancée à la place.
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.