sql >> Databáze >  >> RDS >> Mysql

Parametrizovaný dotaz s několika volitelnými vyhledávacími výrazy

Již jste chráněni proti vkládání SQL, protože používáte mysqli_stmt_bind_params, které za vás správně uniknou.

Edit.Můžete přejít na nějaký databázový rámec, abyste měli čistý a krásný kód.

Jinak... tohle je takový starý špagetový styl... ale miluju to :D

Je docela snadné rozšířit váš kód tak, aby pracoval s neznámým počtem parametrů. Měli byste jednoduše zacyklit na svých parametrech a současně 1. vytvořit řetězec dotazu s otazníkem a přidat parametry do pole, které budete předat maxdb_stmt_bind_param (zdroj $stmt , řetězec $types , pole &$var ).

Takže by to vypadalo takto. Předpokládá, že je tam alespoň JEDEN parametr (ale vyhnout se tomu je triviální).

$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. Datum MySQL se po uložení JPA změní na včerejší datum

  2. TypeError:Nelze přečíst vlastnost 'password' undefined v přihlašovací trase

  3. php:SQLSTATE[HY000] [2002] Nebylo možné navázat spojení, protože jej cílový počítač aktivně odmítl

  4. Nastavte časové pásmo v PHP a MySQL