sql >> Database >  >> RDS >> Mysql

Geparametriseerde zoekopdracht met verschillende optionele zoektermen

U bent al beschermd tegen sql-injectie, aangezien u de mysqli_stmt_bind_params gebruikt die correct voor u zullen ontsnappen.

Bewerken. Je zou kunnen overschakelen naar een databaseframework om een ​​schone en mooie code te hebben.

Anders... dit is zo'n oude spaghetti-stijl... maar ik vind het geweldig :D

Het is vrij eenvoudig om uw code uit te breiden om met een onbekend aantal parameters te werken. Je moet gewoon je parameters herhalen en tegelijkertijd 1. bouw je querystring met de vraagtekennotatie en voeg je parameters toe aan een array, die je doorgeeft aan maxdb_stmt_bind_param ( resource $stmt , string $types , array &$var ).

Het zou er dus zo uitzien. Het gaat ervan uit dat er tenminste EEN parameter aanwezig is (maar het is triviaal om dit te vermijden).

$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. Laravel &multiple count queries met Eloquent

  2. SQL Server 2017 Stap voor stap installatie -1

  3. PHP Lijst gebruikers van SQL Database in tabel

  4. mysql-datumlijst met telling, zelfs als er geen gegevens zijn op een specifieke datum