tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Výběr databáze v již otevřeném spojení (‚No database selected‘)

před 7 lety

Šroubek
Člen | 7

Ahoj,
jde nějak vybrat databázi v již otevřeném spojení?
Uvedu příklad co se mi nedaří:

$conf = array("driver"=>"mysql","host"=>"localhost","database"=>"mydatabase",...);
dibi::connect($conf); // zde jsem úspěšně připojen k databázi `mydatabase`
dibi::query("DROP DATABASE `mydatabase`"); // zde je asi pochopitelné že mě to od dropnuté databáze "odpojí" (spojení s DB serverem zůstává otevřené)
dibi::query("CREATE DATABASE `mydatabase`");

dibi::query("CREATE TABLE `mytable` (`id` INT(10),`value` VARCHAR(50))"); // ZDE mi to zahlásí chybu 'No database selected'

Stačí abych hned za CREATE DATABASE přidal dibi::disconnect(); dibi::connect($conf); a vše pak proběhne tak jak má (tabulka mytable se vytvoří). Ovšem zase mi to hlásí Warning: Cannot redeclare class NDebugger

Nebo můžu přidat název databáze přímo do dotazu CREATE TABLE mydatabase.mytable... a také to projde a tabulka se vytvoří (ale název databáze bych musel psát pak do každého dotazu).

Snažil jsem se najít něco jako dibi::selectDatabase("mydatabase"), zkoušel jsem použít dibi::activate(...), zkoušel jsem hledat zde na fóru i jinde na webu, ale nic se nesetkalo s požadovaným výsledkem :-( Prosím tedy o radu jestli nevíte jak to vyřešit, popřípadě co dělám špatně…

Díky za každou radu.

PS: Jen pro upřesnění proč dropuju databázi a pak ji zase vytvářím: mydatabase není databáze na které běží můj web, ale pouze testovací databáze na které budu spouštět databázové testy (něco jako Unit Testy, ovšem pro otestování tříd které přistupují k databázi). A před spuštěním testu potřebuji uvést testovací prostředí do výchozího stavu, což je prázdná databáze ve které si následně vytvořím potřebné tabulky naplněné testovacími daty individuálně pro každý test.

před 7 lety

paranoiq
Člen | 388

USE `mydatabase`

před 7 lety

Šroubek
Člen | 7

Jsem to ale trotl – tohle mě mohlo taky napadnout ;-) Helám v tom kdejaké složitosti a řešení je tak prosté. Moc díky.