Bindování ve sprintf() rubrika: Programování: PHP
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?
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));
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře