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