sql >> Base de Datos >  >> RDS >> Mysql

Consulta parametrizada con varios términos de búsqueda opcionales

Ya está protegido contra la inyección de sql, ya que está utilizando mysqli_stmt_bind_params que escapará correctamente para usted.

Editar. Puede cambiar a algún marco de base de datos para tener un código limpio y hermoso.

De lo contrario... este es un estilo de espagueti tan antiguo... pero me encanta :D

Es bastante fácil expandir su código para trabajar con un número desconocido de parámetros. Simplemente debe recorrer sus parámetros y al mismo tiempo 1. construya su cadena de consulta con la notación de signo de interrogación y agregue sus parámetros a una matriz, que pasará a maxdb_stmt_bind_param ( resource $stmt , string $types , array &$var ).

Entonces se vería así. Asume que hay al menos UN parámetro (pero es trivial evitarlo).

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