tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

dibi a multi_query (mysqli, odbc)

před 10 lety

mcmatak
Člen | 492

umí dibi multi_query? ať hledám jak hledám, tak se zdá, že ani ve zdrojáku, žádný příkaz multiquery není, dokonce s použitím odbc druhý dotaz ořízne

šlo by to nějak řešit? aktuálně to nedokážu nijak rozumně suplovat a opravdu potřebuji použít multi_query

před 10 lety

David Grudl
Nette Core | 6806

dibi multiquery neumí. Buď si můžeš napsat vlastní driver (podědit existující) nebo přímo zavolat specifickou PHP funkci a jako resource předat $connection->driver->resource.

před 10 lety

mcmatak
Člen | 492

a bude umět? v nejbližší době? :) a proč v případě odbc ořezává další dotazy?

před 10 lety

David Grudl
Nette Core | 6806

Umět nebude. Jsi první, kdo podobnou vlastnost potřebuje. Proč ODBC ořezává dotazy netuším.

před 10 lety

mcmatak
Člen | 492

no multi_query mi přijde jako důležitá věc ne? hromadné zápisy do databáze jsou tisíckrát rychlejší než jednotlivá volání. a opravdu se najde mnoho možností, kdy je to potřeba, kdy je to dost podstatná optimalizace výkonu

s ODBC jsem to napsal blbě, ODBC samozřejmě nic neořezává, ale query;query;query; bez problémů přes odbc_exec provede, ovšem dibi pošle na odbc_exec pouze první query

před 10 lety

David Grudl
Nette Core | 6806

Podle měření na MySQL mi hromadný zápis přes multi query žádné zajímavé zrychlení nepřinesl. Naopak takový multi-insert přes INSERT INTO ... VALUES (...), (...), (...), ... představuje zcela zásadní zrychlení, dokonce o několik řádů.

To ořezávání prověřím – můžeš mi poslat nějaký kód, kde se to stává?

před 10 lety

mcmatak
Člen | 492

1. mysqli multi_query

S insert into máš samozřemě pravdu, ale jde tady o hromadný update a další (ten už jde jedině insert into on duplicate key update – coz opravdu není moc ideální byť to používám více než 5 let), co třeba když potřebuješ proložit insert a update, tzn. klasický zápis do více tabulek

insert into produkty a hned potom; insert into produkty_obrazky last_inserted atd.

zkus chvilku věnovat

http://www.webfaq.cz/…je-to-stejne

2. ODBC, příklad? vkládám do mssql přes odbc a dibi něco jako třeba:
INSERT INTO test (id, name) VALUES(1, „test“); INSERT INTO test2 (id, name) VALUES (1, „test“);

aktualizuje se pouze tabulka test, druhý dotaz se neprovede, při použití s odbc_exec ano, zatím to řeším odděleně, ale co třeba případ, kdy potřebuješ naplnit nějaké uživatelské proměnné před samotným INSERT, potřebuješ dva dotazy SELECT;INSERT; a kdyz tohle je potřeba udělat tisíckrát, pak je to problém, rozdílem jsou minuty

před 10 lety

David Grudl
Nette Core | 6806

Nenašel jsem v kódu nic, co by mohlo ořezávat dotazy. Co ti po provedení vícenásobného příkazu přes ODBC vypíše echo dibi::$sql?

před 10 lety

mcmatak
Člen | 492

sorry, většina chyb bude u mne tím, že jsem si stáhl dibi z dibiphp.com, a až nyní jsem začal používat svn, a tohle se tam nijak neprojevuje, alespoň ne v rev. 235

nebylo by vhodné aktualizovat stažení dibi na stránkách také z svn? každopádně tohle vyřešeno a bez problémů se provedou i dotazy za středníkem

před 10 lety

David Grudl
Nette Core | 6806

Teď nerozumím – verze na SVN (resp. GIT) a nabízená ke stažení na https://dibiphp.com/cs/ bývají stejné. Na webu lze ještě stáhnout starší verzi 1.01, v ní se chyba projevuje?

před 10 lety

mcmatak
Člen | 492

ano, stahoval jsem cca 3/2009 poslední stable verzi, takže asi 1.1, chybující kód

$q1=dibi::insert(‚test‘, array(‚id‘=>rand(100, 1000), ‚name‘=>„Ahoj“)).„;“;
$q2=dibi::insert(‚test‘, array(‚id‘=>rand(100, 1000), ‚name‘=>„Ahoj“)).„;“;
dibi::query($q1.$q2);
echo dibi::$sql;
 die();

testována na odbc, databáze MSSQL