Ahoj.
Chtěl bych se zeptat, musím nějak ošetřit vstupní data, která vkládám do databáze (INSERT)?
Záleží na datech. Obecně ano.
Pro celá čísla intval(), pro texty (a databáze MySQL) mysql_real_escape_string(), atd. Číselný intval() má ale samozřejmě potenciální nevýhodu, že může data změnit (tzn. některé chyby se hůř hledají).
___
Co si pamatuju, pro sqlite existoval ekvivalent mysql_real_escape_string(), jak přesně se volal/jmenoval nevím.
Vím, že musím ošetřovat data při SELECTu, ale u INSERTu jsem si nebyl jistý. Děkuji, Freeze, za odpověď. ;)
Princip SQL injection nespočívá v tom, o jaký typ dotazu se jedná ;)
___
Mimochodem v PHP je nebezpečí SQL injection trochu limitované ze strany funkcí pro obsluhu MySQL. Klasické SQL injection lze využít k provedení více dotazů najednou (ukončení prvního a přidání následujících, např.: "; DROP TABLE tabulka;--). Vestavěné databázové funkce v PHP však mají vnitřní omezení pouze na jeden dotaz a další ignorují (v případě s DROP TABLE by se žádné smazaní neprovedlo). Přesto je nutné data kontrolovat (protože ani toto "omezení" nezabrání modifikaci toho první dotazu, který se opravdu provede). To tak pro informaci.
SQL injection se dá bránit i používáním tzv. parametrizovyných dotazů. Ovladač MySQL je bohužel neumí, ale MySQLi a PDO je už umí. Vstupy pak není nutné nijak ošetřovat.