Jak vynutit neescapování parametru v Database (NotORM)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Sochi
Člen | 17
+
0
-

Mám víceméně začátečnický problém s utvořením specifikcého SQL dotazu. Předpokládal jsem, že prostřednictvím SqlLiteral lze obejít escapování hodnot, což se však ukázalo jako chyba. Jakým způsobem lze vytvořit následující dotaz?

<?php
SELECT *
FROM `element`
WHERE (`id` REGEXP '^[A-Za-z0-9_]+$')
?>

Původní (a plánovaný) postup, který bohužel nevede k řešení:

<?php
// Vytvoreni literalu pro omezeni
$literal = new SqlLiteral("id REGEXP '^[A-Za-z0-9_]+$'");

// Nacteni seznamu elementu (standardni tovarnicka)
$elements = $this->context->createElements()->where($literal);
?>

Výsledkem je totiž dotaz, viz niže, ve kterém jsou části použitého regulárního výrazu escapovány (což samozřejmě není dobře).

<?php
SELECT *
FROM `project_element`
WHERE (`id` REGEXP '^[A-`Za`-`z0`-9_]+$')
?>

Udělal jsem někde triviální chybu nebo je toto prostě vlastnost, kterou nikdo neřeší?

paranoiq
Člen | 392
+
0
-

->where("id REGEXP ?", $regexp) nefunguje?

Sochi
Člen | 17
+
0
-

paranoiq napsal(a):

->where("id REGEXP ?", $regexp) nefunguje?

Samozřejmě funguje. Tak dlouho jsem dotaz upravoval, až jsem zapomněl na nejeednodušší možnost.

paranoiq
Člen | 392
+
0
-

přesto to vypadá na bug. tohle by SqlLiteral dělat neměl. zvlášť uvnitř stringu

hrach
Člen | 1834
+
0
-

Known bug, uplne stejny problem jako v tom, kde si me na toto odkazal. je treba kompletne prepsat Sqlbuilder. neni to jediny problem.