Oznámení
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