Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: создание базы и таблиц из SQL файла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
MrBeard
Отправлено: 19 Сентября, 2011 - 13:07:56
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




для интереса решил добавить создание базы данных и таблиц из SQL скрипта.

Как это вообще через PHP реализуется? для начала я попробовал использовать запрос, как в клиенте делал - source monitoring.sql. нашло ошибки в SQL. после гугленья нашёл пример, где такой файл разбивался по точке с запятой и каждая команда запускалась отдельно, но у меня уже на строчке создания базы данных выпадает.

код -
PHP:
скопировать код в буфер обмена
  1.  
  2. $db = mysql_connect(DB_HOST, $dbUser, $dbPass);
  3. $fileContent = file_get_contents($sqlFile);
  4. $sqlArray = explode(';', $fileContent);
  5. foreach ($sqlArray as $sql)
  6. {
  7.     if (!mysql_query($sql,$db))
  8.         echo "Error creating database: " . mysql_
  9. }

ошибка -
CODE (htmlphp):
скопировать код в буфер обмена
  1. Error creating database: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE DATABASE IF NOT EXISTS `mon` DEFAULT CHARACTER SET UTF8' at line 1


сам скрипт вот -
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE DATABASE IF NOT EXISTS `mon` DEFAULT CHARACTER SET UTF8 ;
  2. GRANT ALL ON mon.* TO 'monitor'@'localhost' IDENTIFIED BY 'monmon';
  3. USE `mon` ;
  4.  
  5. -- -----------------------------------------------------
  6. -- Table `mon`.`server_t`
  7. -- -----------------------------------------------------
  8. CREATE  TABLE IF NOT EXISTS `mon`.`server_t` (
  9.   `server_id` INT NOT NULL AUTO_INCREMENT ,
  10.   `server_name` VARCHAR(45) NOT NULL ,
  11.   PRIMARY KEY (`server_id`) )
  12. ENGINE = InnoDB;
  13.  
  14.  
  15. -- -----------------------------------------------------
  16. -- Table `mon`.`url_t`
  17. -- -----------------------------------------------------
  18. CREATE  TABLE IF NOT EXISTS `mon`.`url_t` (
  19.   `url_id` INT NOT NULL AUTO_INCREMENT ,
  20.   `server_id` INT NOT NULL ,
  21.   `host` VARCHAR(150) NOT NULL,
  22.   `port` INT NOT NULL,
  23.   `timeout` INT NOT NULL,
  24.   PRIMARY KEY (`url_id`) ,
  25.   INDEX `fk_url_t_server_t` (`server_id` ASC) ,
  26.   CONSTRAINT `fk_url_t_server_t`
  27.     FOREIGN KEY (`server_id` )
  28.     REFERENCES `mon`.`server_t` (`server_id` )
  29.     ON DELETE NO ACTION
  30.     ON UPDATE NO ACTION)
  31. ENGINE = InnoDB;
  32.  
  33.  
  34. -- -----------------------------------------------------
  35. -- Table `mon`.`state_t`
  36. -- -----------------------------------------------------
  37. CREATE  TABLE IF NOT EXISTS `mon`.`state_t` (
  38.   `state_id` INT NOT NULL AUTO_INCREMENT ,
  39.   `state_name` VARCHAR(45) NOT NULL ,
  40.   PRIMARY KEY (`state_id`) )
  41. ENGINE = InnoDB;
  42.  
  43.  
  44. -- -----------------------------------------------------
  45. -- Table `mon`.`monitoring_t`
  46. -- -----------------------------------------------------
  47. CREATE  TABLE IF NOT EXISTS `mon`.`monitoring_t` (
  48.   `monitoring_id` INT NOT NULL AUTO_INCREMENT ,
  49.   `server_id` INT NOT NULL ,
  50.   `state_id` INT NOT NULL ,
  51.   `date` TIMESTAMP NOT NULL,
  52.   PRIMARY KEY (`monitoring_id`) ,
  53.   INDEX `fk_monitoring_1` (`server_id` ASC) ,
  54.   INDEX `fk_monitoring_2` (`state_id` ASC) ,
  55.   CONSTRAINT `fk_monitoring_1`
  56.     FOREIGN KEY (`server_id` )
  57.     REFERENCES `mon`.`server_t` (`server_id` )
  58.     ON DELETE NO ACTION
  59.     ON UPDATE NO ACTION,
  60.   CONSTRAINT `fk_monitoring_2`
  61.     FOREIGN KEY (`state_id` )
  62.     REFERENCES `mon`.`state_t` (`state_id` )
  63.     ON DELETE NO ACTION
  64.     ON UPDATE NO ACTION)
  65. ENGINE = InnoDB;
  66.  
  67. INSERT INTO state_t VALUES
  68.         (1,"oK"),
  69.         (2,"have problems"),
  70.         (3,"offline");
  71.  


думал глянуть, как у других реализуется, там используется pear SqlParser, я с ними пока не сталкивался, стоит ли копать туда?
(Добавление)
по поводу ошибки разобрался - 'CREATE DATABASE IF NOT EXISTS `mon` DEFAULT CHARACTER SET UTF8' at line 1

чётров BOM=)
 
 Top
EuGen Администратор
Отправлено: 19 Сентября, 2011 - 13:58:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




PHP:
скопировать код в буфер обмена
  1. exec('mysql -uUSER -pPASSWORD < /path/to/file.sql');


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
MrBeard
Отправлено: 19 Сентября, 2011 - 14:00:10
Post Id



Гость


Покинул форум
Сообщений всего: 97
Дата рег-ции: Авг. 2011  


Помог: 2 раз(а)




EuGen пишет:
PHP:
скопировать код в буфер обмена
  1. exec('mysql -uUSER -pPASSWORD < /path/to/file.sql');

а средствами самого PHP без вызова внешних утилит нельзя?(
в прочем, код выше уже заработал...

(Отредактировано автором: 19 Сентября, 2011 - 14:06:36)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB