Autor | Zpráva | ||
---|---|---|---|
jefitto44 Profil |
#1 · Zasláno: 13. 2. 2015, 16:53:30
$sel="SELECT * FROM translator WHERE label='".$label."'";
Toto je na SQL injection ako stvorené... ako sa to dá ošetriť? mysqli_real_escape_string sa mi akosi nechce používať, prepared statements zas nefungujú... metódu mysqli->prepare() z manualu PHP som akosi nepochopil... |
||
juriad Profil |
#2 · Zasláno: 13. 2. 2015, 16:56:53
Je to pěkně popsáno tady:
http://www.fisir.tk/itblog/mysql_ V dotazu v metodě prepare prostě místo hodnot napíšeš otazníky a pak zavoláš bind_param tolikrát, kolik máš v dotazu otazníků. |
||
lionel messi Profil |
#3 · Zasláno: 13. 2. 2015, 16:59:16
jefitto44:
„mysqli_real_escape_string sa mi akosi nechce používať“ Práve toto je funkcia vhodná na escapovanie. Jej slabinou však je, že na takéto ošetrenie možno zabudnúť. „metódu mysqli->prepare() z manualu PHP som akosi nepochopil...“ Český návod www.fisir.tk/itblog/mysql_#prepared-statements si čítal? Môžeš použiť taktiež niektoré hotové riešenia, napr. dibi. |
||
jefitto44 Profil |
V mojom prípade by to teda vyzeralo takto?
$db je premenná s mysqli_connect $sel="SELECT * FROM translator WHERE label=(?)"; $db->prepare($sel); $db->bind_param("s", $premennaSDanouHodnotou); a $db->query($sel) netreba tým pádom? |
||
juriad Profil |
$sel = "SELECT * FROM translator WHERE label=?"; $query = $db->prepare($sel); // může vrátit FALSE, pokud je v dotazu chyba $query->bind_param("s", $premennaSDanouHodnotou); $query->execute(); // vrací TRUE / FALSE $data = $query->get_result(); // může vrátit FALSE $radek = $query->fetch_assoc(); // vrací FALSE, pokud žádný další řádek není |
||
jefitto44 Profil |
#6 · Zasláno: 13. 2. 2015, 17:05:41
Ešte jedna otázka, ako bude server vedieť, že ktorý bindnutý param má kde zaradiť? Musím dodržiavať poradie?
|
||
lionel messi Profil |
#7 · Zasláno: 13. 2. 2015, 17:06:32
jefitto44:
„Ešte jedna otázka, ako bude server vedieť, že ktorý bindnutý param má kde zaradiť? Musím dodržiavať poradie?“ Práve poradie bude pre server rozhodujúce, čiže áno. |
||
Časová prodleva: 8 let
|
0