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
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ší?