Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как выполнить дамп базы данных в PHP?
 
 автор: Киналь   (27.12.2005 в 19:00)   письмо автору
 
 

Извиняюсь за неконкретное название темы; лучше не придумал=)

Проблема вот в чем.
Создал с помощь phpMyAdmin дамп БД, сохранил в файл с расширением .sql, после чего попытался создать базу заново с помощью такого кода:

$sql=file_get_contents('CMS.sql');
      mysql_query($sql)
                   or die(mysql_error());

В ответ получил вот что:

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 '; -- --------------------------------------------------------

Сделал то же самое через phpMyAdmin (там можно указать текстовый файл с дампом) - "Ваш SQL-запрос успешно выполнен"

В чем может быть дело?

PS Сама база существует, ее создавать не надо; создать нужно только таблицы в ней.

   
 
 автор: cheops   (27.12.2005 в 22:01)   письмо автору
 
   для: Киналь   (27.12.2005 в 19:00)
 

Функция mysql_query() может обрабатывать только один запрос - необходимо разбить дамп на отдельные запросы и выполнить их в цикле.

   
 
 автор: Киналь   (28.12.2005 в 13:47)   письмо автору
 
   для: cheops   (27.12.2005 в 22:01)
 

Ах вот оно что... Спасибо, буду пробовать.

   
 
 автор: Киналь   (28.12.2005 в 16:04)   письмо автору
5 Кб
 
   для: Киналь   (27.12.2005 в 19:00)
 

Нет, проблема не решилась, к сожалению.
Написал вот что:

$sql=file('CMS.txt'); // перешел на txt. чтобы сам файл прочитать/подредактировать проще было
      foreach($sql as $sql_string)
              {
               if (trim($sql_string) != '')
               {
               echo $sql_string.'<br>';
               mysql_query(trim($sql_string))
                   or die(mysql_error());
               }
              }

На первой же строке собственно команд получаю ошибку:

CREATE TABLE 'articles' ( 
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 '' at line 1


Искренне надеясь на вашу помощь, прикрепляю на всякий случай сам .txt-файл.

   
 
 автор: denvor   (28.12.2005 в 17:01)   письмо автору
 
   для: Киналь   (28.12.2005 в 16:04)
 

file загружает твой файл в массив ПОСТРОЧНО. А тебе нужно сначала вырезать комментарии (скорее всего - с использованием регулярных выражений), а затем разбить по символу ;(например, функция strtok ) и поместить в массив

Хотя, может комментарии можно и не резать...

<?php
// читаем файл в буфер
$buffer fread($fp,filesize("sql.txt")); 
// разбиваем по символу
$tok strtok($buffer,";");
// в цикле заносим в массив $sql_arr

while ($tok)
    {
      
$sql_arr[] = $tok;
      
$tok strtok(";");
     }
// потом читаешь массив в цикле и ... - дальше знаешь :)
?>

   
 
 автор: Киналь   (28.12.2005 в 17:27)   письмо автору
 
   для: denvor   (28.12.2005 в 17:01)
 

А-а, точно! Вот, блин, не сообразил... Ща поправим;-)
Спасибо!

   
 
 автор: Loki   (28.12.2005 в 17:25)   письмо автору
 
   для: Киналь   (28.12.2005 в 16:04)
 

Решал как-то на форуме такую же проблему: перевод строки с качестве разделителя использовать нельзя, так как он может встречаться в текстовых полях, точку с запятой - тоже.
В итоге, не придумал ничего умнее, чем использовать искуственно созданый разделитель (так как дамп я формирую самостоятельно, то с этим проблем не возникло). Так и живу пока...

   
 
 автор: denvor   (29.12.2005 в 09:33)   письмо автору
 
   для: Loki   (28.12.2005 в 17:25)
 

Про разделитель: да, вспомнил, что у меня тоже были такие грабли (это я про точку с запятой. тогда здесь разделитель: " ;\n-- " Пойдет?

   
 
 автор: Киналь   (29.12.2005 в 16:18)   письмо автору
 
   для: Киналь   (27.12.2005 в 19:00)
 

Большое всем спасибо, все работает, все прекрасно! Поскольку данных в дампе нет, только структура таблиц, то разделитель";" работает превосходно.
Тема закрыта=)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования