Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильная обработка *.sql файлов 
:(
    Опции темы
Smak
Дата 15.4.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.6.2005

Репутация: нет
Всего: 1



Подскажите как правильно и без всяких проблем обрабатывать *.sql файлы
PM MAIL WWW ICQ   Вверх
Serkys
Дата 15.4.2006, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 1
Всего: 22



Попробуй, может сработает:
Код

mysql_query(require('file.sql'));

Сам не пробовал, чисто предполагаю.
PM MAIL   Вверх
Serkys
Дата 16.4.2006, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 1
Всего: 22



Не, попробовал - не работает. 
PM MAIL   Вверх
Smak
Дата 16.4.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.6.2005

Репутация: нет
Всего: 1



надо всё разбить по точке с запятой и чтобы он пропускал знак #
я делал но както всё криво... может кто делал красиво?

Код

$link=mysql_connect("localhost","root","");
mysql_select_db("test");

$filename = "db.sql";
$fp = fopen($filename, "r");
$bufer = fread($fp, filesize($filename));
fclose($fp);

$quer = explode (";", $bufer);

foreach ($quer as $query)
{
    if(!mysql_query($query.";")) exit(mysql_error());
}

 mysql_close ($link);
 
PM MAIL WWW ICQ   Вверх
madFobos
Дата 17.4.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



А че mysql_error() то пишет? 
PM MAIL   Вверх
Ignat
Дата 17.4.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



во блин, наворотили...
А так не пробовали?

Код

<?php
exec("mysql --user=userName --password=userPass --database=DBName < file.sql");
?>


Если хотите получить ответ, то воспользуйтесь аналогом exec (кажись passthru), который возвращает массив строк stdout. 


--------------------
Теперь при чем :P
PM   Вверх
Smak
Дата 18.4.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.6.2005

Репутация: нет
Всего: 1



в виндовсе не работает 
PM MAIL WWW ICQ   Вверх
madFobos
Дата 19.4.2006, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Вобщем, сделай проще:
Код

$strings = file("db.sql"); //Получили массив строк
foreach ($strings AS $string)
{
  //Не помню только # - это спец символ в регулярных выражениях
  if (preg_match("/^\s?#/", $string) || !preg_match("/[^\s]/", $string))
     continue;
  else
    mysql_query($string) or die(mysql_error());
}
 
PM MAIL   Вверх
Ignat
Дата 19.4.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: нет
Всего: 73



Цитата(Smak @  18.4.2006,  23:17 Найти цитируемый пост)
в виндовсе не работает  

Работает =)
Просто нужно чтобы путь к папке /mysql/bin был прописан в переменной окружения PATH, либо указывать полный путь к утилите Mysql, например:

Код

<?php
exec("C:\path_to_mysql\bin\mysql --user=userName --password=userPass --database=DBName < file.sql");
?>


Цитата(madFobos @  19.4.2006,  08:15 Найти цитируемый пост)
Вобщем, сделай проще:


madFobos, считаешь, что обработка регулярками в цикле проще заливки дампа одной строкой через редирект stdin?  smile  


--------------------
Теперь при чем :P
PM   Вверх
Smak
Дата 19.4.2006, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.6.2005

Репутация: нет
Всего: 1



madFobos, всё бы хорошо но только он обрабатывает такие запросы 

Код


INSERT INTO `category` VALUES (1, 0, 'Новости', 0, 1, '5');
INSERT INTO `category` VALUES (2, 1, 'Консоль', 1, 0, '5');
и тд


а такие не хочет:

Код

CREATE TABLE `category` (
  `id` int(11) NOT NULL auto_increment,
  `ord` int(11) NOT NULL default '0',
  `category` varchar(250) NOT NULL default '',
  `activ` int(11) NOT NULL default '0',
  `echomain` int(11) NOT NULL default '0',
  `page` varchar(250) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
 

Как быть? 

Это сообщение отредактировал(а) Smak - 19.4.2006, 12:37
PM MAIL WWW ICQ   Вверх
madFobos
Дата 19.4.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Цитата(Smak @  19.4.2006,  12:35 Найти цитируемый пост)
Как быть? 


О, дак у тебя еще и DDL-запросы там  smile 

Ну первое, что в голову приходит:

Код

$strings = file("db.sql"); //Получили массив строк
$query = '';
foreach ($strings AS $string)
{
  if (preg_match("/^\s?#/", $string) || !preg_match("/[^\s]/", $string))
     continue;
  else
  {
      $query .= $string;
      if (preg_match("/;\s?$/", $query))
      {
           mysql_query($string) or die(mysql_error());
           $query = '';
      }
  }
}

 
PM MAIL   Вверх
Smak
Дата 19.4.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.6.2005

Репутация: нет
Всего: 1



madFobos, INSERT'ы обрабатывает верно, а вот CREATE TABLE выводит только это:

Код

 ) TYPE=MyISAM; 

 
У меня запросы на создание таблиц (CREATE TABLE) и INSERT'ы находяться в разных файлах, что упрощает задачу. Вот как сделал:

Код

$strings = file("mysql_structure.sql");
$link=mysql_connect("localhost","root","");
mysql_select_db("test");

    foreach ($strings AS $string)
    {
        if (preg_match("/^\s?#/", $string) || !preg_match("/[^\s]/", $string))
                       continue;
        else
            $allstring.= $string;
    }

      $quer = explode (";", $allstring);
      foreach ($quer as $query)
     {

             if(!mysql_query($query.";")) exit(mysql_error());

     }
 mysql_close ($link);

  

Это сообщение отредактировал(а) Smak - 19.4.2006, 19:46
PM MAIL WWW ICQ   Вверх
madFobos
Дата 20.4.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Цитата(Smak @  19.4.2006,  19:38 Найти цитируемый пост)
madFobos, INSERT'ы обрабатывает верно, а вот CREATE TABLE выводит только это:


Да я ошибся просто, там надо не mysql_query($string), а mysql_query($query) - тады все ОК будет. Но твой вариант тоже верен  smile 
 
PM MAIL   Вверх
Mal Hack
Дата 21.4.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 11
Всего: 261



Ребят, не мучайтесь, никто так дампы не обрабатывает. У вас скрипт повиснет на файле 2-4 метра уже скорее всего.
Используйте то, что вам Ignat сказал. Это разумное, рациональное решение. 
PM ICQ   Вверх
madFobos
Дата 21.4.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.12.2005

Репутация: 1
Всего: 3



Цитата(Ignat @  19.4.2006,  08:59 Найти цитируемый пост)
madFobos, считаешь, что обработка регулярками в цикле проще заливки дампа одной строкой через редирект stdin? 


Я проще не на mysql --.... имел ввиду, а на его скрипт

Цитата(Mal Hack @  21.4.2006,  12:38 Найти цитируемый пост)
Ребят, не мучайтесь, никто так дампы не обрабатывает. У вас скрипт повиснет на файле 2-4 метра уже скорее всего.
Используйте то, что вам Ignat сказал. Это разумное, рациональное решение.  

 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.5214 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.