Вопрос

У меня есть файл 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)
Это было полезно?

Решение

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

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

Я нашел несколько примеров ошибки здесь:

погуглив это:

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top