Nette\Database a vytváření schématu databáze (exec SQL skriptu)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
thunderbuff
Člen | 164
+
0
-

Pořebuji vytvořit databázi a její schéma přímo z PHP skriptu:

<?php
		$dumpPath = __DIR__ . '/dbDump.sql';

		if (!is_readable($dumpPath)) {
			throw new \App\Exceptions\InvalidStateException('DATABASE DUMP CORRUPTED');
		}

		$createSchemeSQL = strtr(file_get_contents($dumpPath), array('%%%USERID%%%' => $entity->getId()));

		$database = $this->connMan->getSchemeCreationConnection($entity); // Vrací connection s DSN bez vybrané databáze
		$prep = $database->prepare($createSchemeSQL);
		$prep->execute();

/*
Proměnná $createSchemeSQL obsahuje SQL export z admineru:

-- Adminer 3.6.1 MySQL dump

SET NAMES utf8;
SET foreign_key_checks = 0;
SET time_zone = 'SYSTEM';
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

CREATE DATABASE IF NOT EXISTS `app_user_%%%USERID%%%`
USE `app_user_%%%USERID%%%`;

SET @adminer_alter = '';

-- a dál tabulky s cizími klíči a triggery, žádná data
*/

?>

Když kód spustím, databáze se vytvoří, ale pouze s jedinou tabulkou – tou, která je v SQL exportu jako první. Nedojde k žádné chybě, jen se vytvoří pouze jedna tabulka. Kde může být probém?

(POkud vezmu dump a nacpu ho do konzole v admineru, funguje zcela správně)

Editoval thunderbuff (27. 3. 2013 16:00)

Aurielle
Člen | 1281
+
0
-

Netuším, jak to je v PDO, rychlý google našel toto: http://stackoverflow.com/…-pdo-mysqlnd. Při použití mysqli extensionu přes mysqli_query() nešlo spouštět více dotazů zároveň, podobné omezení asi bude i tady. Nejjednodušší by tedy bylo rozdělit dump na jednotlivé příkazy a jeden po druhém je spouštět.

thunderbuff
Člen | 164
+
0
-

Díky za nakopnutí správným směrem. Statická metoda z Helpers se použít nedala, protože mé SQL obsahuje i triggery (které používají DELIMITER ;; a ten metoda neumí zpracovat). Ale napsal jsem si vlastní parser dělící skript na jednotlivé statementy, už mi to funguje. Díky!

Editoval thunderbuff (28. 3. 2013 0:27)