sql >> Database teknologi >  >> RDS >> Mysql

Parametriseret forespørgsel med flere valgfri søgetermer

Du er allerede beskyttet mod sql-injektion, da du bruger mysqli_stmt_bind_params, som vil undslippe korrekt for dig.

Edit.Du kan skifte til en databaseramme for at få en ren og smuk kode.

Ellers... det er så gammel spaghetti-stil... men jeg elsker det :D

Det er ret nemt at udvide din kode til at arbejde med et ukendt antal parametre. Du skal bare sløjfe på dine parametre og samtidig 1. bygge din forespørgselsstreng med spørgsmålstegnsnotationen og tilføje dine parametre til et array, som du sender til maxdb_stmt_bind_param ( ressource $stmt , string $types , array &$var ).

Så det ville se sådan ud. Det antager, at mindst EN parameter er der (men det er trivielt at undgå dette).

$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. SQL-fejl:ORA-02000:mangler ALTID nøgleord, når der oprettes en identitetskolonnebaseret tabel

  2. AES_DECRYPT() og AES_ENCRYPT() i MySQL med polske tegn

  3. PHP salt og hash SHA256 til login-adgangskode

  4. Hvordan får jeg IDENTITY / AUTONUMBER værdien for rækken, jeg indsatte i pymysql