Autor | Zpráva | ||
---|---|---|---|
esh Profil * |
#1 · Zasláno: 2. 2. 2013, 23:49:49
Ahoj,
chtěl bych se zeptat zda někdo nevíte jak dostat z dibi čisté sql, které se posílá jako dotaz do databáze ? napr: $sql = dibi::query(...)->test();, ale tak aby se vypsalo ciste sql bez html znacek Díky |
||
Tori Profil |
esh:
Podle dibi quick start by poslední provedený dotaz měl být v proměnné dibi::$sql . Háček je v tom, že tyhle ladící proměnné jsou vyplněné jen tehdy, když je nastavené logování do souboru a/nebo Firebug+FirePHP konzole. Dá se to obejít tím, že si nastavíte nějaký callback, který se má volat místo profileru po každém dotazu:
dibi::connect($options); function foo(DibiEvent $e) { } dibi::getConnection()->onEvent[] = 'foo'; $result = dibi::query('select * from `table` where id = %i', 1)->fetch(); var_dump($result, dibi::$sql, dibi::$elapsedTime); |
||
Jan Tvrdík Profil |
#3 · Zasláno: 3. 2. 2013, 09:17:45
esh:
Korektní postup je $sql = $connection->translate(...); $sql = dibi::getConnection()->translate(...); |
||
esh Profil * |
#4 · Zasláno: 3. 2. 2013, 21:39:29
Díky moc za odpovědi,
kukal jsem do zdrojáků dibi a ten příkaz translate se mě zdál jako nejlepší volbou. Nevím co dělám špatně, že dostávám jenom výsledek místo dotazu. Napří: $q = dibi::select("name_node")->as("name"); $q->from("node"); $q->where('id_node = %i', 1); $q->limit(20); $q->offset(0); print_r(dibi::getConnection()->translate($q)); Výsledek takovéhoto snažení provede sql doaz a vrátí mě již výsledek (název sloupce s id = 1), pokud tedy není zakopaný pes ve fluentoj... |
||
Jan Tvrdík Profil |
#5 · Zasláno: 3. 2. 2013, 21:56:03
esh:
Inspiroval jsi mě k tweetu :) To, cos napsal, je naprostý nesmysl. Vypadá to, že vůbec netušíš, jak to funguje. Metoda translate netuší nic o existenci třídy DibiFluent . Z DibiFluent sestavený dotaz nijak snadno nedostaneš (pokud jsem tedy něco nepřehlídl).
|
||
Tori Profil |
#6 · Zasláno: 3. 2. 2013, 23:24:12
Jan Tvrdík:
„Z DibiFluent sestavený dotaz nijak snadno nedostaneš“
Tím nekorektním způsobem ano. Taky bych byla ráda, kdyby to šlo nějak nenásilně. Co bys např. použil ty v situaci, kdy DB dotaz sice neskončí chybou (= nezjistím výsledný dotaz z výjimky), ale prostě jen proti očekávání nevrátí žádná data? (Třeba když použiju inner join místo left a pak někdy někdo smaže odpovídající řádek v připojené tabulce.) Z mého pohledu to je chyba, kterou nutno logovat, ale jak to vysvětlit dibi, když SQL je syntakticky ok? |
||
Jan Tvrdík Profil |
Tori:
Teď mi vůbec není jasné, co řešíš za problém. Nicméně protože používám Nette a mám zapnutý dibi profiler, tak vidím všechny položené SQL dotazy v debugger panelu. Nemám-li Nette, tak ručně zavolám dibi::test(...) (resp. $fluent->test() ) a za tím exit .
|
||
esh Profil * |
#8 · Zasláno: 4. 2. 2013, 13:17:19
Děkuji, z mé strany je to vyřešené. Udělal jsem nad dibi ještě nadstavbu, můj problém řeší.
|
||
Časová prodleva: 11 let
|
0