Diskuze: Jak ošetřit vstup při použití LIKE v dotazu pro databázi
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj, řešení je jednoduché
Db::queryAll('SELECT * FROM uzivatele WHERE vek = ?', "%{$vek}%");
Případně s apostrofy
Db::queryAll('SELECT * FROM uzivatele WHERE vek = ?', '%' . $vek . '%");
Jen tak btw, na co potřebuješ v databázi ukládat věk uživatele, který se každoročně mění? Není lepší si uložit datum narození a věk z toho spočítat?
Jo, to by určitě bylo lepší, ale tohle je jen příklad, ve skutečnosti v tý databázi pro kterou to potřebuju nemám věk, ale něco jiného... Tohle mě jen tak rychle napadlo abych to tady mohl vysvětlit
Ok, v pořádku, jen mě to tak napadlo
Jeste bych mozna v php odmazal nadbytecne % a * ze zacatku a konce. Uzivatele obcas nevi, jak rici, ze chteji pouzit like, nevidi dovnitr programu.
Co přesně myslíš? Jako, že nemám používat LIKE pokud jde o vstup od uživatele? Nechápu...
V sql query davas:
... sloupec LIKE '%slovo%'
No, a ted jsou uzivatele, co zkousi pridat * nebo % do inputu, napr
<input value="%slovo"> nebo <input value="*slovo">
... sloupec LIKE '%%slovo%' | ... sloupec LIKE '%*slovo%'
Oni nevidi php kod, tak nevi, ze tam s like pracujes.
Cili, mozna (zalezi na datech), bych z te promenne mazal ze zacatku a z konce
znaky * a %. Neco jako dela php trim() pro mezery.
Je to zbytecnost navic, ale muze se to obcas hodit.
Jasně, to je dobrý point Sloupec ve kterém se bude hledat by tyto znaky stejně obsahovat asi neměl, takže to není problém mazat Nicméně asi i upozorním uživatele, že jsou tyto znaky zakázané, pokud se je tam pokusí hodit.
Zobrazeno 10 zpráv z 10.