Программный эквивалент импорта в phpMyAdmin
-
23-09-2019 - |
Вопрос
У меня есть файл 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)
Решение
У вас двойная проблема.
Эта ошибка является ошибкой ограничения внешнего ключа.Какая-то таблица, которую вы пытаетесь создать, вероятно, имеет внешний ключ к другой таблице, которая еще не создана.
Я нашел несколько примеров ошибки здесь:
- http://www.brainfault.com/2008/02/15/mysql-error-1005-hy000-cant-create-table-tablefrm-errno-150/
- http://forums.mysql.com/read.php?22,19755,19755
погуглив это:
- http://www.google.is/search?hl=en&q=Может't+create+table++(ошибка:+150)
Вторая проблема заключается в том, что у вас, вероятно, возникнут проблемы при импорте большого файла, потому что я не думаю, что вы сможете выполнить несколько команд sql, разделенных ;как вы можете в phpmyadmin.Я бы предложил использовать такой скрипт:
Я сам не пробовал, но у меня нет оснований полагать, что это не сработает.
Другие советы
Вы всегда можете просто посмотрите исходный код