Letní akce PHP týden
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
Petr
Člen
Avatar
Petr:7. února 15:13

Ahoj, potřebuju nahradit tenhle dotaz bezpečnějším řešením.

public function vratVyber()
        {
                return Db::dotazVsechny("
                        SELECT *
                        FROM `clanky`
                        WHERE `titulek` LIKE '%".$_POST['search']."%'
                ");

Zkusil jsem:

return Db::dotazVsechny("
                        SELECT *
                        FROM clanky
                        WHERE titulek LIKE ?
                ", array($_POST['search']));
        }

Chci docílit: Kolem "otazníku" potřebuju doplnit zástupné znaky "procent" tak, aby dotaz vrátil stejné výsledky jako v 1. dotazu, nejenom výsledky přesně shodné s proměnnou. Zaboha se mi nedaří správná syntaxe.

 
Odpovědět 7. února 15:13
Avatar
Odpovídá na Petr
Michal Šmahel:7. února 15:32

Ahoj, je to obvyklý problém spočívající ve formátu vložených dat. Existují dvě řešení:

Úprava SQL dotazu:

SELECT *
FROM `clanky`
WHERE `titulek` LIKE CONCAT('%', ?, '%')

Připojení zástupných znaků přímo k řetězci:

return Db::dotazVsechny("
        SELECT *
        FROM clanky
        WHERE titulek LIKE ?
    ", ['%' . $_POST['search'] . '%']);
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 7. února 15:32
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Petr
Člen
Avatar
Petr:7. února 15:52

Díky, ta "CONCAT" verze funguje.

Ale ta druhá vyhodí "Notice: Undefined index: ..."

 
Nahoru Odpovědět 7. února 15:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.