tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Podtržítko v %like~ modifikatoru

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

ali:

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