Мне нужно импортировать (большой) .sql
файл в MySQL с PHP и фреймворком Zend.
Соединение открыто, и у меня есть $_sql
, содержащий все содержимое файла SQL, но - конечно, простое
$this->db->query($_sql);
не будет работать.
Что я могу сделать, чтобы импортировать этот большой файл?
Обновление: да, это mysql-dump с определениями структуры моей mysql-базы данных. И да, он должен запускаться изнутри php без использования командной строки.
РЕШИТЬ:
Мне нужен объект mysqli, чтобы это исправить, mysqli-> multiQuery - это путь. Вот как выглядит мой (модульный тест) загрузчик:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'testing'));
// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();
// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$options = $application->getOptions();
$_sqlFile = realpath(APPLICATION_PATH.'\\..\\tests\\sql\\');
$_sqlFile .= '\\myLargeSQL.sql';
$sql = file_get_contents($_sqlFile);
$mysqliobject = new mysqli(
$options['resources']['db']['params']['host'],
$options['resources']['db']['params']['username'],
$options['resources']['db']['params']['password'],
$options['resources']['db']['params']['dbname']
);
$mysqliobject->multi_query($sql);
if ($mysqliobject->errno <> 0) {
throw new Exception('Error creating temp database in ('.__FILE__.' on line '.__LINE__.')');
}
$mysqliobject->close();
Не беспокойтесь о \, это только временно (скоро это исправят), и да, я на Windows-машине. Так что, может быть, кто-то может использовать его.