PHP Velho Oeste 2024

mysqli::real_query

mysqli_real_query

(PHP 5, PHP 7, PHP 8)

mysqli::real_query -- mysqli_real_queryExecuta uma consulta SQL

Descrição

Estilo orientado a objetos

public mysqli::real_query(string $query): bool

Estilo procedural

mysqli_real_query(mysqli $mysql, string $query): bool

Executa uma única consulta no banco de dados cujo resultado pode ser recuperado ou armazenado usando as funções mysqli_store_result() ou mysqli_use_result().

Aviso

Alerta de segurança: injeção de SQL

Se a consulta contiver qualquer entrada de variável, instruções preparadas parametrizadas devem ser usadas. Alternativamente, os dados devem ser formatados corretamente e todas as strings devem ser escapadas usando a função mysqli_real_escape_string().

Para determinar se uma determinada consulta deve retornar um conjunto de resultados ou não, consulte mysqli_field_count().

Parâmetros

mysql

Somente no estilo procedural: Um objeto mysqli retornado por mysqli_connect() ou mysqli_init()

query

A string de consulta.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Erros/Exceções

Se o relatório de erros da extensão mysqli estiver habilitado (MYSQLI_REPORT_ERROR) e a operação solicitada falhar, um aviso será gerado. Se, além disso, o modo for definido como MYSQLI_REPORT_STRICT, uma exceção mysqli_sql_exception será lançada em vez do aviso.

Veja Também

add a note add a note

User Contributed Notes 3 notes

up
1
TIL
5 years ago
Please note that this example is vulnerable to injection and uses plain-stored passwords...
up
0
jay at cloudulus dot media
5 years ago
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);
?>
up
-58
Tinker
7 years ago
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.
To Top