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

Форум MySQL

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

 

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

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

тема: перевод базы с DBF на Mysql
 
 автор: Kien   (01.11.2007 в 11:53)   письмо автору
 
 

Здрасте, помогите решить такую проблему:

Есть файл с расширением .dbf, но нету доступа к базе. Весит он порядка 50 мегабайт. Лежит на локале, И надо его перекинуть в mysql на виртуальный сервер. Помогите со скриптом.

Я использовал во этот:

  include ('config.php');
    set_time_limit(400);
// Разделитель
$separator = ";";
// Читаем содержимое в переменную
$file = file_get_contents("c:/banks.dbf");
// Разбиваем по строкам
$strings = explode("\n", $file);
// Формируем цикл
for ($i = 0; $i < count($strings); $i++) {
  $sub_string = explode($separator, $strings[$i]);
  for ($k = 0; $k < count($sub_string); $k++) {
    $query = "INSERT INTO 'banks' VALUES 
              (".$sub_string[0].", 
              ".$sub_string[1].", 
              ".$sub_string[2].", 
              ".$sub_string[3].",
              ".$sub_string[4].",
              ".$sub_string[5].",
              ".$sub_string[6].",
              ".$sub_string[7].",
              ".$sub_string[8].",
              ".$sub_string[9].",
              ".$sub_string[10].",
              ".$sub_string[11].",
              ".$sub_string[12].",
              ".$sub_string[13].",
              ".$sub_string[14].",
              ".$sub_string[15].",
              ".$sub_string[16].",
              ".$sub_string[17].",
              ".$sub_string[18].",
              ".$sub_string[19].",
              ".$sub_string[20]."
              
              )";
  mysql_query($query);
  }




но он пишет ошибку


Notice: Undefined offset: 1 in z:\home\unistream.cz\www\2.php on line 24

и т.д.

Может кто подскажет как надо правильно? Заранее спасибо

   
 
 автор: elenaki   (01.11.2007 в 12:35)   письмо автору
 
   для: Kien   (01.11.2007 в 11:53)
 

50 мега - в переменную ?!?! :O

   
 
 автор: sim5   (01.11.2007 в 12:42)   письмо автору
 
   для: Kien   (01.11.2007 в 11:53)
 

Индеска 1 не найдено в массиве, это значит что ваш массив содеджит одну строку. Ваш исходник это "порожедение Windows" и вы зря на нем ищите "\n", нет такого в нем, в Windows перевод строк это последовательность Chr(13).Chr(10).

   
 
 автор: Kien   (01.11.2007 в 13:11)   письмо автору
 
   для: sim5   (01.11.2007 в 12:42)
 

Ок, а как можно это все закинуть? Это реально сделать посредствам РНР?

   
 
 автор: sim5   (01.11.2007 в 14:06)   письмо автору
 
   для: Kien   (01.11.2007 в 13:11)
 

Я бы никуда бы не закидывал, а сохранил это стандартным дампом sql запроса, а уж потом с помощью РМА экспортировал.

   
 
 автор: Kien   (01.11.2007 в 16:05)   письмо автору
 
   для: sim5   (01.11.2007 в 14:06)
 

А каким же образом можно сохранить стандартным дампом? Че-то я не очень понимаю....:(

   
 
 автор: sim5   (01.11.2007 в 16:12)   письмо автору
 
   для: Kien   (01.11.2007 в 16:05)
 

Вместо запроса к базе формируйте в цикле текстовую переменную, затем запишите ее в файл. Сделайте все это отдельным временным скриптом.

   
 
 автор: Kien   (01.11.2007 в 16:14)   письмо автору
 
   для: sim5   (01.11.2007 в 16:12)
 

Млин..... вот с этим у меня хуже..... Может покажете как это примерно....... а?

   
 
 автор: sim5   (01.11.2007 в 16:24)   письмо автору
 
   для: Kien   (01.11.2007 в 16:14)
 


<?
$sql 
''
for ($i 0$i count($strings); $i++) { 
  
$sub_string explode($separator$strings[$i]); 
  for (
$k 0$k count($sub_string); $k++) { 
    
$sql .= "INSERT INTO 'banks' VALUES  
              ("
.$sub_string[0].",  
              "
.$sub_string[1].",  
              "
.$sub_string[2].",  
              "
.$sub_string[3].", 
              "
.$sub_string[4].", 
              "
.$sub_string[5].", 
              "
.$sub_string[6].", 
              "
.$sub_string[7].", 
              "
.$sub_string[8].", 
              "
.$sub_string[9].", 
              "
.$sub_string[10].", 
              "
.$sub_string[11].", 
              "
.$sub_string[12].", 
              "
.$sub_string[13].", 
              "
.$sub_string[14].", 
              "
.$sub_string[15].", 
              "
.$sub_string[16].", 
              "
.$sub_string[17].", 
              "
.$sub_string[18].", 
              "
.$sub_string[19].", 
              "
.$sub_string[20].
              )"

  } 
}

$f fopen('damp.sql','w');
fputs($f$sql);
fclose($f);

Это с учтетом того, что разделять надо не по \r. Просмотрите потом обыкновенным блокнотом, нет ли ошибок в полученном дампе, если что, можно будет в ручную отредактировать. И уж потом через РМА экспорт.

   
 
 автор: Kien   (01.11.2007 в 16:40)   письмо автору
 
   для: sim5   (01.11.2007 в 16:24)
 


$sql = '' 


Эт че значит?

   
 
 автор: sim5   (01.11.2007 в 17:17)   письмо автору
 
   для: Kien   (01.11.2007 в 16:40)
 

Вы как на РНР пишите? $sql = '' ; (точку с запятой забыл) - это объявление перменной, в которую будет записан дамп запроса после прохождения цикла, и которая потом запишется в файл.

   
 
 автор: Kien   (01.11.2007 в 17:27)   письмо автору
 
   для: sim5   (01.11.2007 в 17:17)
 

А все равно ошибку пишет



Notice: Undefined offset: 1 in z:\home\unistream.cz\www\2.php on line.....

   
 
 автор: sim5   (01.11.2007 в 17:33)   письмо автору
 
   для: Kien   (01.11.2007 в 17:27)
 

Проверьте:

echo count($strings);

и

$sub_string = explode($separator, $strings[$i]);
echo count($sub_string);

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

   
Rambler's Top100
вверх

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