sql >> Database teknologi >  >> RDS >> Mysql

Filtrer MYSQL-forespørgsel med formularindstillinger

Prøv dette. Fra min test lokalt (uden db) så rigtigt ud.

$n_req = 0;
$_POST['usuario'] = 'test';
$_POST['resumo'] = 'test2';
$_POST['status'] = 'test3';
if (!empty($_POST['usuario'])) {
$req_usuario = $_POST['usuario'];
$where[] = " usuario = ? ";
$params[] = $req_usuario;
$n_req++;
}
if (!empty($_POST['resumo'])) {
$req_resumo = $_POST['resumo'];
$where[] = " resumo = ? ";
$params[] = $req_resumo;
$n_req++;
}
if (!empty($_POST['status'])) {
    $req_status = $_POST['status'];
$where[] = " status = ? ";
$params[] = $req_status;
$n_req++;
}
$sql_where = !empty($where) ? ' where ' . implode(' and ', $where) : '';
echo $sql_where;
$tot = mysqli_prepare($con, "SELECT * FROM solicitacoes $sql_where");
if(!empty($params)) {
//foreach($params as $param) {
//  mysqli_stmt_bind_param($tot, "s", $param);
    //echo $param;
//}
$params = array_merge(array($tot),
                  array(str_repeat('s', count($params))), 
                  array_values($params));
print_r($params);
call_user_func_array('mysqli_stmt_bind_param', $params);
// adapated from https://stackoverflow.com/questions/793471/use-one-bind-param-with-variable-number-of-input-vars and http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli may need to be altered
}
echo "SELECT * FROM solicitacoes $sql_where";
mysqli_execute($tot);

Hvis alle tre værdier er udfyldt, skal din forespørgsel være

? udfyldes med værdierne af driveren senere i processen. Dette forhindrer brugeren/brugerne i at tilføje skadelig kode for at manipulere SQLs-behandlingen.

https://www.owasp.org/index.php /SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
Hvordan kan jeg forhindre SQL indsprøjtning i PHP?

Jeg kunne heller ikke se hvor $funcao blev indstillet..

Du kan kommentere mysqli ud funktioner og dekommentere ekkolinjerne for at se, hvad koden gør. Det var sådan, jeg bekræftede, at forespørgsler blev bygget som forventet.



  1. Postgres-udløser efter indstik med adgang til NYT

  2. hvordan kopieres data fra fil til PostgreSQL ved hjælp af JDBC?

  3. Fælles tabeludtryk, hvorfor semikolon?

  4. Send PHP Array via jQuery Ajax