很多使用mysql建站的朋友都会遇到一个问题,就是在向mysql中导入大量数据时遇到各种挫折。使用phpmyadmin导出数据库备份很容易,但是要执行相反的操作简直就是一场恶梦。
这段代码就是针对这个问题而写的,起源于今天帮一个朋友恢复一个discuz论坛数据库。

使用前请首先按照代码注释修改要导入的SQL文件名、数据库主机名、数据库用户名、密码、数据库名,同时将数据库文件和本文本一起ftp导网站目录,然后以web方式访问此文件即可。

注:
1、此代码当php运行于safe mode的时候超时设置语句set_time_limit失效,可能会导致导入中途失败,解决办法是将要导入的文件分成多个,逐块导入。
2、本部分代码是今天刚刚出炉,只是经过简单的测试,证明其可运行于负翁自己的计算机和朋友的服务器上,并不一定适合所有的php/mysql环境。欢迎跟贴反馈意见。

/******************************************/ 
/* PhyMyAdmin Data Importer */ 
/* www.ebugs.org */ 
/* Copyright 富翁 in im286.com 2005.04.09 */ 
/* 转载请注明出处 */ 
/******************************************/ 

//用来快速Mysql的大数据备份 
//使用前请首先按照代码注释修改要导入的SQL文件名、数据库主机名、数据库用户名、密码、数据库名 
//同时将数据库文件和本文本一起ftp导网站目录,然后以web方式访问此文件即可 
//落伍(www.im286.com)负翁版权所有,可随意使用,但保留版权信息 

$file_name="a.sql"; //要导入的SQL文件名 
$dbhost="localhost"; //数据库主机名 
$dbuser="anonymous"; //数据库用户名 
$dbpass=""; //数据库密码 
$dbname="test"; //数据库名 

set_time_limit(0); //设置超时时间为0,表示一直执行。当php在safe mode模式下无效,此时可能会导致导入超时,此时需要分段导入 
$fp = @fopen($file_name, "r") or die("不能打开SQL文件 $file_name");//打开文件 
mysql_connect($dbhost, $dbuser, $dbpass) or die("不能连接数据库 $dbhost");//连接数据库 
mysql_select_db($dbname) or die ("不能打开数据库 $dbname");//打开数据库 

echo "正在执行导入操作 
"; 
while($SQL=GetNextSQL()){ 
if (!mysql_query($SQL)){ 
echo "执行出错:".mysql_error()." 
"; 
echo "SQL语句为: 
".$SQL." 
"; 
}; 

echo "导入完成"; 

fclose($fp) or die("Can't close file $file_name");//关闭文件 
mysql_close(); 

//从文件中逐条取SQL 
function GetNextSQL() { 
global $fp; 
$sql=""; 
while ($line = @fgets($fp, 40960)) { 
$line = trim($line); 
//以下三句在高版本php中不需要,在部分低版本中也许需要修改 
$line = str_replace("\\","\",$line); 
$line = str_replace("'","'",$line); 
$line = str_replace("\r\n",chr(13).chr(10),$line); 
// $line = stripcslashes($line); 
if (strlen($line)>1) { 
if ($line[0]=="-" && $line[1]=="-") { 
continue; 


$sql.=$line.chr(13).chr(10); 
if (strlen($line)>0){ 
if ($line[strlen($line)-1]==";"){ 
break; 



return $sql; 

?>