gpt4 book ai didi

php - 使用 php 和 zend 框架导入大型 .sql 文件

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:32 24 4
gpt4 key购买 nike

我必须使用 PHP 和 Zend 框架将一个(大).sql 文件导入到 MySQL。

连接已打开,我有包含 SQL 文件全部内容的 $_sql,但是 - 当然,一个简单的

$this->db->query($_sql);

将不起作用。

如何导入这个大文件?

更新:是的,它是一个 mysql 转储,其中包含我的 mysql 数据库的结构定义。是的,它需要在不使用命令行的情况下从 php 中运行。

已解决:我需要一个 mysqli 对象来解决这个问题,mysqli->multiQuery 是可行的方法。这是我的(单元测试) Bootstrap 的样子:

<?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 机器上。所以,也许有人可以使用它。

最佳答案

您可以使用以下代码完成此操作。

$db = Zend_Db_Table::getDefaultAdapter();
$db->beginTransaction();
$sql = file_get_contents(APPLICATION_PATH . '/path/to/your/data.sql');
$db->query($sql);
$db->commit();

但是如果你的sql太大,它可能会超过php的最大执行时间。我建议您创建一个 php 脚本并从 php 命令行运行它。例如,在您的公共(public)文件夹中,创建名为 import.php 的 php 脚本

 <?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') : 'development'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);

$options = $application->getOptions();

$db = Zend_Db::factory($options['resources']['db']['adapter'], array(
'host' => $options['resources']['db']['params']['host'],
'username' => $options['resources']['db']['params']['username'],
'password' => $options['resources']['db']['params']['password'],
'dbname' => $options['resources']['db']['params']['dbname']
));

//OR
//$application->getBootstrap()->bootstrap('db');
//$db = Zend_Db_Table::getDefaultAdapter();

$db->beginTransaction();
$sql = file_get_contents(APPLICATION_PATH . '/path/to/your/data.sql');
$db->query($sql);
$db->commit();

确保您的 application.ini 具有默认的数据库表适配器作为 zendframework 文档。否则,您可以手动配置数据库设置。在示例中,您可以将 sql 文件放在应用程序文件夹中。您可以根据需要进行更改。

然后你可以从你的命令行运行它,进入命令行中的公用文件夹并运行命令

 php import.php

更新:

导入大型 sql 文件的另一种简单方法是使用工具。我习惯使用 Navicat (http://www.navicat.com/en/products/navicat_premium/premium_overview.html)。导入/导出非常简单快捷

关于php - 使用 php 和 zend 框架导入大型 .sql 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com