Bindování ve sprintf() rubrika: Programování: PHP

2 tobotomas
položil/-a 5.5.2015

Ahoj, nemůžu se nikde dohledat tak řeším jestli je nějak možné bindovat proměnné do funkce sprintf() problém je takový, že jsem dostal do ruky starý systém, který si připravuje SQL dotazy přes
 sprintf('INSERT INTO tabulka (sloupec1, sloupec2, sloupec3) VALUES (%s, %s, %s)', $val1, $val2, $val3);
akorát tu jsou dotazy třeba o 30ti sloupcích, tak je trochu problém se v tom už vyznat :) Jak tohle nejlépe řešit abych nemusel předělávat celý systém?

odkaz Vyřešeno
12 Kit
odpověděl/-a 5.5.2015

Nejlépe tak, že se funkce sprintf() zcela zbavíš a místo toho použiješ prepared statements, který je např. v PDO:

$insert = $pdo->prepare("INSERT INTO `tabulka` (`sloupec1`, `sloupec2`, `sloupec3`) VALUES (?, ?, ?)");
$insert->execute(array($val1, $val2, $val3));

Výhodou je, že je to odolné proti SQL injection a vypadá to přece jen přehledněji.

Existuje ještě alternativní forma zápisu, která by se měla používat, pokud je těch sloupců hodně:

$insert = $pdo->prepare("INSERT INTO `tabulka` (`sloupec1`, `sloupec2`, `sloupec3`) VALUES (:sloupec1, :sloupec2, :sloupec3)");
$insert->execute(array(':sloupec1' => $val1, ':sloupec2' => $val2, ':sloupec3' => $val3));

Komentáře

  • Žížala : Jo tohle asi bude nejsnažší a nejméně pracné. 6.5.2015
  • tobotomas : ok, to PDO bude asi nejlepší, i když to bude znamenat víc přepisování než jsem měl v plánu, ale ten sprintf() je fakt šílenej :) 7.5.2015

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.