【发布时间】:2011-08-10 00:42:14
【问题描述】:
这可能很明显,但我已通过 phpmyadmin 将数据库导出到 .sql 文件。我正在尝试通过 php 脚本将文件导入另一个数据库,但我不知道如何执行此操作。我确信这很容易做到,因为我可以通过 phpmyadmin 运行查询轻松完成同样的事情。有什么建议吗?
【问题讨论】:
这可能很明显,但我已通过 phpmyadmin 将数据库导出到 .sql 文件。我正在尝试通过 php 脚本将文件导入另一个数据库,但我不知道如何执行此操作。我确信这很容易做到,因为我可以通过 phpmyadmin 运行查询轻松完成同样的事情。有什么建议吗?
【问题讨论】:
你可以使用php的system()函数运行mysql命令。
你不能使用mysql_query,因为这个函数不能运行多个查询
system('mysql -u <user> -p<password> dbname < filename.sql');
【讨论】:
我编写了这段代码,它对我有用。希望对您有所帮助。
注意:这似乎有点太简单了,如果我忽略了某些东西,请有人警告我吗?谢谢
$connection = new mysqli(DB_SERVER, DB_USER, DB_PASS, $databaseName);
$query = "";
foreach ($sqlFileContents as $line) {
$line = trim($line);
if ($line != "" && substr($line, 0, 2) != '--') {
$query .= $line;
if (substr($line, -1) == ';') {
$connection->query($query);
echo ($query."\n");
if ($connection->errno) {
echo ("\n".$connection->errno . ": ");
echo ($connection->error."\n");
}
$query = "";
}
}
}
unset ($line);
if ($connection->errno) {
echo ($connection->errno . ": ");
echo ($connection->error);
}
$connection->close();
【讨论】:
【讨论】:
如果是巨大的 SQL 文件,你需要做的就是
$sql = file_get_contents('sqlfile.sql');
//make the connection
mysql_query($sql); //assuming what you have is actually valid SQL
只是好奇,为什么不通过数据库实用程序来做到这一点?
编辑:正如 Shakthi Singh 指出的那样,您不能一次性在 mysql_query 中运行多个查询(虽然没有经过测试)。
但是,根据您的文件,这可能仍会导致问题,如本问题所述:PHP: multiple SQL queries in one mysql_query statement(mysql_query 不支持某些语句)
因此,根据您的 SQL 的外观,上述解决方案可能不可行。
然而,一切都没有丢失,这个线程:Loading .sql files from within PHP 谈论了一些替代方案。用户 arin sarkissian 指出 mysqli_multi_query() 是一个选项
【讨论】:
读入文件,然后
mysql_query(file_contents)
当心超时,我的儿子。
【讨论】:
; 来终止查询并开始新的查询? Bobby Tables 对使用强大的 mysql_query 的网站没有影响...
mysql_query() sends a unique query (multiple queries are not supported) 中所述。或者你可以自己尝试一下。