Oznámení
Omlouváme se, provoz fóra byl ukončen
Podtržítko v %like~ modifikatoru
Upozornění: Tohle vlákno je hodně staré.
- ali
- Člen | 280
Ahoj,
mam u sve aplikace udelany naseptavac, ktery mi vyjizdi zaznamy z tabulky s „text%“, chtel bych do tohodle zakomponovat i wildcard, tzn kdyz zada uzivatel „te*t“, aby se dotaz prelozil na „te_t%“
Mam to udelane zatim takto, ale samozrejme mi to nefunguje, protoze dibi mi escapuje podtrzitko
$this->db->query("SELECT * FROM [pn] WHERE [pn] LIKE %like~ ORDER BY [pn] ASC LIMIT 10",Strings::replace($pn,["~[*]~i" => "_"]))->fetchAll();
SELECT * FROM `pn` WHERE `pn` LIKE '1\_-T4%' ORDER BY `pn` ASC LIMIT 10
napada nekoho reseni, jakto udelat?
Editoval ali (1. 4. 2015 11:19)
- Milo
- Nette Core | 1119
Třeba:
$likeSql = $this->db->translate('%like~', $pn);
$this->db->query('SELECT .... LIKE %SQL', strtr($likeSql, ['*' => '_']));
Jen s %SQL
opatrně, je to snadná cesta pro SQL injection.
Komentáře
No ja to nakonec udelal takto, kde se podtrzitko neescapuje
$this->db->query("SELECT * FROM [pn] WHERE [pn] LIKE %s ORDER BY [pn] ASC LIMIT 10",Strings::upper(Strings::replace($pn,["~[*]~i" => "_"])."%"))->fetchAll();
presto dik
před 4 lety