Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Filtruj zapytania MYSQL za pomocą opcji formularza

Spróbuj. Z moich testów lokalnie (bez db) wyglądał dobrze.

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

Jeśli wszystkie trzy wartości są wypełnione, zapytanie powinno mieć postać

? są wypełniane wartościami przez sterownik w dalszej części procesu. Zapobiega to dodawaniu przez użytkowników złośliwego kodu w celu manipulowania przetwarzaniem SQL.

https://www.owasp.org/index.php /SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
Jak mogę zapobiec SQL wstrzyknięcie w PHP?

Nie widziałem też, gdzie $funcao został ustawiony..

Możesz zakomentować mysqli funkcji i odkomentuj linie echa, aby zobaczyć, co robi kod. W ten sposób potwierdziłem, że zapytania zostały zbudowane zgodnie z oczekiwaniami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL zwiększający wydajność bez pamięci podręcznej

  2. Wstaw do tabeli MySQL lub zaktualizuj, jeśli istnieje

  3. Jaka jest różnica między addslashami PHP a mysql(i)_escape_string?

  4. Odpytywanie MySQL o współrzędne szerokości i długości geograficznej, które znajdują się w określonym promieniu mili

  5. Najlepsze praktyki dotyczące długości kolumny varchar SQL