Mysql
 sql >> база данни >  >> RDS >> Mysql

Филтрирайте MYSQL заявка с опции за формуляр

Опитайте това. От моето тестване локално (без db) изглеждаше правилно.

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

Ако и трите стойности са попълнени, вашата заявка трябва да бъде

? се попълват със стойностите от драйвера по-късно в процеса. Това не позволява на потребителя(ите) да добавят злонамерен код, за да манипулират обработката на SQLs.

https://www.owasp.org/index.owasp /SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
Как мога да предотвратя SQL инжекция в PHP?

Също така не видях къде $funcao беше зададено..

Можете да коментирате mysqli функции и декомментирайте ехо линиите, за да видите какво прави кодът. Така потвърдих, че заявките се изграждат според очакванията.



  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

  2. Mysql group_concat от повтарящи се ключове и брой повторения на множество колони в 1 заявка (Оптимизация на заявки)

  3. Преобразувайте SQL резултатите в PHP масив

  4. MySQL INSERT IF (персонализирани оператори if)

  5. недефиниран метод `eq' за nil:NilClass с rails 3 и ruby ​​enterprise на ubuntu hardy