Escapování v Nette Database vs. backjoin znak

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

Ahoj,

je možné zrušit automatické escapování názvů sloupců? Potřebuji vložit do dotazu řetězec s dvojtečkou, ale Nette Database to rozliší jako backjoin a to i když vložím text do uvozovek.

Dík za odpověď.

Eda
Backer | 220
+
0
-

Pokud je ten tvůj řetězec hodnotou, podle které se například vyhledává, tak to nepatří přímo do toho SQL stringu, ale do argumentů a v SQL uvedeš jen otazník.

Pokud nám sem ale nepostneš nějaký kód, nikdo ti víc asi neporadí. Ani česky ani anglicky :-)

iskejp
Člen | 41
+
0
-

Ahoj a díky Edo za reakci (v CZ :o)).

Ano, řetězec je hodnota pro vyhledání. Nicméně šlo mi spíše o obecnou rovinu, zda existuje nějaká možnost v NDB vypnout escape. V konkrétním případě jsem to nakonec nějak obešel.

Zkoušel jsem předávat hodnotu v poli i v řetězci a vždy dojde na úpravu vstupní hodnoty.

Martk
Člen | 661
+
0
-

Třída pro položení dotazu bez escapování Nette\Database\SqlLiteral

Příklad:

$database->table('table')->('column', new SqlLiteral('dotaz'));
n.u.r.v.
Člen | 485
+
0
-

Ahoj, můžete mi prosím poradit, jak zapsat tento dotaz tak, aby se neprovádělo escapování?

SELECT DATE_FORMAT(DATE_ACTIVATE,'%Y/%m/%d %H:%i') AS DATE_ACTIVATE, DATE_FORMAT(DATE_CLOSE,'%Y/%m/%d %H:%i') AS DATE_CLOSE FROM survey WHERE ID = 1;

Zkusil jsem toto:

return $this->dbTests->table('survey')->select(new Nette\Database\SqlLiteral("DATE_FORMAT(DATE_ACTIVATE,'%Y/%m/%d %H:%i')")." AS DATE_ACTIVATE, ".new Nette\Database\SqlLiteral("DATE_FORMAT(DATE_CLOSE,'%Y/%m/%d %H:%i')")." AS DATE_CLOSE")->where("ID =? AND HASH =?", $id, $hash)->fetch();

Ale pořád mi to escapuje ten zápis formátu

Díky

Edit – zatím jsem to udělal ručně přes queryArgs – to funguje

Editoval n.u.r.v. (17. 10. 2014 14:15)

ondrej256
Člen | 188
+
0
-

n.u.r.v. napsal(a):

Ahoj, můžete mi prosím poradit, jak zapsat tento dotaz tak, aby se neprovádělo escapování?

SELECT DATE_FORMAT(DATE_ACTIVATE,'%Y/%m/%d %H:%i') AS DATE_ACTIVATE, DATE_FORMAT(DATE_CLOSE,'%Y/%m/%d %H:%i') AS DATE_CLOSE FROM survey WHERE ID = 1;

Zkusil jsem toto:

return $this->dbTests->table('survey')->select(new Nette\Database\SqlLiteral("DATE_FORMAT(DATE_ACTIVATE,'%Y/%m/%d %H:%i')")." AS DATE_ACTIVATE, ".new Nette\Database\SqlLiteral("DATE_FORMAT(DATE_CLOSE,'%Y/%m/%d %H:%i')")." AS DATE_CLOSE")->where("ID =? AND HASH =?", $id, $hash)->fetch();

Ale pořád mi to escapuje ten zápis formátu

Díky

Edit – zatím jsem to udělal ručně přes queryArgs – to funguje

Právě zápasím se stejným problémem :-( pracuju s datagridem a tam to ručně neudělám

David Matějka
Moderator | 6445
+
+3
-

nejak takhle

->select("DATE_FORMAT(date, ?)", '%Y/%m/%d %H:%i')

vsechny hodnoty je nutno predavat jako parametry