Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta parametrizada com vários termos de pesquisa opcionais


Você já está protegido contra injeção de sql, pois está usando o mysqli_stmt_bind_params que escapará corretamente para você.

Edit.Você pode mudar para algum framework de banco de dados para ter um código limpo e bonito.

De resto... este é um estilo de esparguete tão antigo... mas adoro-o :D

É muito fácil expandir seu código para trabalhar com um número desconhecido de parâmetros. Você deve apenas fazer um loop em seus parâmetros e ao mesmo tempo 1. construir sua string de consulta com a notação de ponto de interrogação e adicionar seus parâmetros a um array, que você passará para maxdb_stmt_bind_param ( resource $stmt , string $types , array &$var).

Então ficaria assim. Ele assume que pelo menos UM parâmetro está lá (mas é trivial evitar isso).
$sql = "SELECT * FROM tbl_data WHERE ";
$and = '';
$types = '';
$parameters = array();
foreach($_POST as $k => $v) {
  // check that $k is on your whitelist, if not, skip to the next item
  $sql .= "$and $k = ?";
  $and = " AND ";
  $parameters[] = $v;
  $types .= 's';
}
$stmt_query = mysqli_prepare($db, $sql);
mysqli_stmt_bind_params($stmt_query, $types, $parameters);