生活的天平本不平衡,只有通过努力改变其偏向。

PHP将Sql文件导入到MySql

2009-07-02

在发布自己的Web程序时,需要在服务器上安装,需将本机的数据导入到服务器上的数据库,直接用数据库远程连接工具导入者请飘过。前一段时间写了一个PHP的小程序,有这个需求,参考了Sablog数据安装部分代码,自己也整了一份,记下以备后用。

?Download download.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@header("content-Type: text/html; charset=UTF-8");
error_reporting(0);
 
$servername"www.database.com";//数据库服务器地址
$dbusername = "root";//帐号
$dbpassword = "password";//密码
$dbname = "websys";//数据库设备
 
$dbcharset = 'utf8';
$sqlfile = 'data.sql';//本机导出的Sql文件
 
if(!is_readable($sqlfile)) {
	exit('数据库文件不存在或者读取失败');
}
$fp = fopen($sqlfile, 'rb');
$sql = fread($fp, 2048000);
fclose($fp);
 
$conn=mysql_connect($servername,$dbusername,$dbpassword);//指定数据库连接参数
if (!$conn)
{
  die('Could not connect: ' . mysql_error());
}
 
function runquery($sql) {
	global $dbcharset, $db_prefix, $DB, $tablenum;
 
	$sql = str_replace("\r", "\n",$sql);
	$ret = array();
	$num = 0;
	foreach(explode(";\n", trim($sql)) as $query) {
		$queries = explode("\n", trim($query));
		foreach($queries as $query) {
			$ret[$num] .= $query[0] == '#' ? '' : $query;
		}
		$num++;
	}
	unset($sql);
 
	foreach($ret as $query) {
		$query = trim($query);
		if($query) {
			if(substr($query, 0, 12) == 'CREATE TABLE') {
				$name = preg_replace("/CREATE TABLE ([a-z0-9_]+) .*/is", "\\1", $query);
				echo '创建表 '.$name.' ... <font color="#0000EE">成功</font><br />';
				mysql_query(createtable($query, $dbcharset));
				$tablenum++;
			} else {
				mysql_query($query);
			}
		}
	}
}
 
function createtable($sql, $dbcharset) {
	$type = strtoupper(preg_replace("/^\s*CREATE TABLE\s+.+\s+\(.+?\).*(ENGINE|TYPE)\s*=\s*([a-z]+?).*$/isU", "\\2", $sql));
	$type = in_array($type, array('MYISAM', 'HEAP')) ? $type : 'MYISAM';
	return preg_replace("/^\s*(CREATE TABLE\s+.+\s+\(.+?\)).*$/isU", "\\1", $sql).
		(mysql_get_server_info() > '4.1' ? " ENGINE=$type DEFAULT CHARSET=$dbcharset" : " TYPE=$type");
}
 
 
mysql_select_db($dbname);
 
runquery($sql);//导入数据文件
 
mysql_close($conn);

有一点需要说明的是,在使用PhpMyAdmin导出Sql文件时,将注释项去了,否则导入不会成功。

作者:lonkil | 分类目录:编程开发 | 标签:

一条评论

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>