Импорт базы данных Microsoft Access в базу данных MySQL - PullRequest
1 голос
/ 14 марта 2012

У меня есть особая ситуация, когда мой клиент требует (периодически) импортировать базу данных ms-access в свою базу данных сайта mysql (так что это удаленная база данных).

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

Моя текущая идея такова (очевидно, что клиент имеет MS-Windows O.S.):

  • Создайте небольшое приложение на C #, которое преобразует базу данных MS-Access в большой запрос SQL, написанный в файле
  • Приложение будет использовать информацию FTP для отправки файла в указанный каталог на веб-сайте
  • Затем PHP-скрипт будет запускаться периодически (например, каждые 30 минут) и проверять, существует ли файл, в конечном итоге импортируя его в базу данных

Я знаю, что это не лучший подход, поэтому я предлагаю вопрос для создания другого обходного пути для этой проблемы. Клиент уже сказал, что хочет продолжать использовать свою базу данных ms-access.

Самая большая проблема, с которой я столкнулся, заключается в том, что скрипты могут длиться всего 30 секунд, что, несомненно, является проблемой при импорте данных.

1 Ответ

1 голос
/ 15 марта 2012

Чтобы обойти 30-секундный лимит, разбейте импорт данных на куски.Вот одна грубая идея:

if(!file_exists('upload.sql')) exit();

$max = 2000; // the maximum number you want to execute.

if(file_exists('progress.txt')) {
    $progress = file_get_contents('progress.txt');
} else {
    $progress = 0;
}

$file = file('upload.sql');

foreach($file as $current => $query) {
    if($current < $progress) continue; // skip the ones we've done
    if($current - $progress >= $max) break; // stop before we hit the max
    mysql_query($query);
}

// did we finish the file?
if($current == count($file) - 1) {
    unlink('progress.txt');
    unlink('upload.sql');
} else {
    file_put_contents('progress.txt', $current);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...