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

Query parametrizzata con diversi termini di ricerca opzionali

Sei già protetto contro l'iniezione di sql, poiché stai utilizzando mysqli_stmt_bind_params che sfuggirà correttamente per te.

Modifica. Potresti passare a un framework di database per avere un codice pulito e bello.

Altrimenti... questo è uno stile di spaghetti così vecchio... ma lo adoro :D

È abbastanza facile espandere il codice per lavorare con un numero sconosciuto di parametri. Dovresti semplicemente scorrere i tuoi parametri e allo stesso tempo 1. costruire la tua stringa di query con la notazione del punto interrogativo e aggiungere i tuoi parametri a un array, che passerai a maxdb_stmt_bind_param ( risorsa $ stmt , string $ tipi , array &$var).

Quindi sembrerebbe così. Presuppone che ci sia almeno UN parametro (ma è banale 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);