Oznámení
Výběr databáze v již otevřeném spojení (‚No database selected‘)
před 8 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 8 lety
- paranoiq
- Člen | 388
USE `mydatabase
`
před 8 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.