Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête paramétrée avec plusieurs termes de recherche optionnels

Vous êtes déjà protégé contre l'injection SQL, car vous utilisez les mysqli_stmt_bind_params qui s'échapperont correctement pour vous.

Modifier.Vous pouvez passer à un cadre de base de données pour avoir un code propre et beau.

Sinon... c'est tellement vieux style spaghetti... mais j'adore ça :D

Il est assez facile d'étendre votre code pour travailler avec un nombre inconnu de paramètres. Vous devez simplement boucler sur vos paramètres et en même temps 1. construire votre chaîne de requête avec la notation de point d'interrogation et ajouter vos paramètres à un tableau, que vous passerez à maxdb_stmt_bind_param ( resource $stmt , string $types , array &$var ).

Donc ça ressemblerait à ça. Il suppose qu'au moins UN paramètre est présent (mais il est trivial d'éviter cela).

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