IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr
Člen
Avatar
Petr:7.2.2019 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.2.2019 15:13
Avatar
Odpovídá na Petr
Michal Šmahel:7.2.2019 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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.2.2019 15:32
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Petr
Člen
Avatar
Petr:7.2.2019 15:52

Díky, ta "CONCAT" verze funguje.

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

 
Nahoru Odpovědět
7.2.2019 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.