Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Filtern Sie die MYSQL-Abfrage mit Formularoptionen

Probieren Sie es aus. Von meinen Tests lokal (ohne db) sah es richtig aus.

$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);

Wenn alle drei Werte ausgefüllt sind, sollte Ihre Abfrage

lauten

Der ? werden später im Prozess vom Treiber mit den Werten gefüllt. Dadurch wird verhindert, dass Benutzer schädlichen Code hinzufügen, um die SQL-Verarbeitung zu manipulieren.

https://www.owasp.org/index.php /SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
Wie kann ich SQL verhindern Injektion in PHP?

Ich habe auch nicht gesehen, wo $funcao wurde gesetzt..

Sie können mysqli auskommentieren Funktionen und kommentieren Sie die Echozeilen aus, um zu sehen, was der Code tut. So habe ich bestätigt, dass Abfragen wie erwartet erstellt wurden.