Программный эквивалент импорта в phpMyAdmin - PullRequest
2 голосов
/ 01 апреля 2010

У меня есть файл SqlDump.sql, который прекрасно работает, когда я применяю его с помощью функции импорта phpMyAdmin, однако мне нужно иметь возможность выполнить это программно. Будучи нубом, я пытался сделать что-то вроде этого:

$SQL=file_get_contents('SqlDump.sql');
$DB=mysqli_connect('localhost','root','');
mysqli_select_db($DB,'somedb');
if (mysqli_multi_query($DB, $SQL)) {
    do {
        if ($result = mysqli_store_result($DB)) {
            mysqli_free_result($result);
        }
    } while (mysqli_next_result($DB));
}
$Err=mysqli_error($DB);
mysqli_close($DB);

Но я получаю все ошибки MySQL. Тем не менее, тот же файл прекрасно работает, когда я импортирую его с помощью phpMyAdmin. Как мне заставить это работать программно?

Ошибка:

Can't create table 'somedb.t_sr_u_alertcode' (errno: 150)

Ответы [ 2 ]

0 голосов
/ 02 апреля 2010

У вас двойная проблема.

Эта ошибка является ошибкой ограничения внешнего ключа. Возможно, какая-то таблица, которую вы пытаетесь создать, имеет внешний ключ для другой таблицы, которая еще не была создана.

Я нашел несколько случаев ошибки здесь:

, прибегая к помощи этого:

Вторая проблема заключается в том, что вы, вероятно, столкнетесь с проблемами при попытке импортировать большой файл, поскольку я не думаю, что вы можете выполнить несколько команд sql, разделенных с; как вы можете в phpmyadmin. Я бы предложил использовать такой скрипт, как этот:

Я сам не пробовал, но у меня нет оснований полагать, что это не работает.

0 голосов
/ 01 апреля 2010

Вы всегда можете просто посмотреть на исходный код

...