tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Funkce pro vytváření databáze

před 5 lety

l564
Člen | 4

Zdravím,
rád bych se zeptal kde přesně mám chybu v kódu

public static function InstallTable(array $data){
   $jmenoTabulky = reset(array_keys($data));
   $hodnoty = implode(',', reset(array_values($data)));
   dibi::query("CREATE TABLE [%s](%s)", $jmenoTabulky, $hodnoty);
   return true;
}

Jedná se o třídu pro interní účely systému kde vytváření tabulek je na denním pořádku, proto jsem se rozhodl že zakročím po funkci. Jedná se o první návrh, proto jistě vím že funkci budu dále upravovat.

Data se zadávají nějak takto:

Trida::InstallTable(
   array('Ahoj' =>
      array('nazev VARCHAR (50)', 'rok_vydani YEAR')
   )
);

A parsování klíčů a spojení hodnot funguje výborně ale při spuštění funkce mi nahlásí že SQL dotaz je chybný.

Zkoušel jsem verzi i následující a to však se pouští bez chyb, ale zdá se mi že je to v rozporu s Dibi

public static function InstallTable(array $data){
   $jmenoTabulky = reset(array_keys($data));
   $hodnoty = implode(',', reset(array_values($data)));
   dibi::query("CREATE TABLE [".$jmenoTabulky."](".$hodnoty.")");
   return true;
}

Děkuji všem z rady

před 5 lety

Milo
Nette Core | 1119

Zdá se mi to takové podivné, ale cca takhle. Máš tam špatný modifikátor pro identifikátor:

list($table, $columns) = each($data);
dibi::test('CREATE TABLE %n', $table, '(%sql)', implode(', ', $columns));

a pokud si seš jistý, že definice sloupců neobsahuje nějaký bordel, můžeš použít modifikátor %SQL.

před 5 lety

l564
Člen | 4

Díky moc, funguje bez chyby.