sql >> Databasteknik >  >> RDS >> Mysql

Parameteriserad fråga med flera valfria söktermer

Du är redan skyddad mot sql-injektion, eftersom du använder mysqli_stmt_bind_params som kommer att fly ordentligt åt dig.

Edit.Du kan byta till något databasramverk för att få en ren och vacker kod.

Annars... det här är så gammal spagettistil... men jag älskar det :D

Det är ganska enkelt att utöka din kod för att fungera med ett okänt antal parametrar. Du bör bara loopa på dina parametrar och samtidigt 1. bygga din frågesträng med frågetecknets notation och lägga till dina parametrar till en array, som du skickar till maxdb_stmt_bind_param ( resurs $stmt , sträng $typer , array &$var ).

Så det skulle se ut så här. Det förutsätter att minst EN parameter finns där (men det är trivialt att undvika detta).

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


  1. python:hur får man aviseringar om mysql-databasändringar?

  2. Hur man kaskader fortsätter med JPA/EclipseLink

  3. Hur man använder EXISTS Logical Operator i SQL Server - SQL Server / TSQL Tutorial Del 125

  4. 5 funktioner för att extrahera veckonummer från ett datum i MariaDB