Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Parametrisierte Abfrage mit mehreren optionalen Suchbegriffen

Sie sind bereits gegen SQL-Injection geschützt, da Sie die mysqli_stmt_bind_params verwenden, die für Sie richtig entkommen.

Bearbeiten. Sie könnten zu einem Datenbank-Framework wechseln, um einen sauberen und schönen Code zu haben.

Ansonsten... das ist so ein alter Spaghetti-Stil... aber ich liebe es :D

Es ist ziemlich einfach, Ihren Code zu erweitern, um mit einer unbekannten Anzahl von Parametern zu arbeiten. Sie sollten einfach Ihre Parameter durchlaufen und gleichzeitig 1. Ihre Abfragezeichenfolge mit der Fragezeichennotation erstellen und Ihre Parameter zu einem Array hinzufügen, das Sie an maxdb_stmt_bind_param übergeben ( Ressource $stmt , Zeichenfolge $types , Array &$var ).

Also würde es so aussehen. Es geht davon aus, dass mindestens EIN Parameter vorhanden ist (aber es ist trivial, dies zu vermeiden).

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