PHP将Sql文件导入到MySql
在发布自己的Web程序时,需要在服务器上安装,需将本机的数据导入到服务器上的数据库,直接用数据库远程连接工具导入者请飘过。前一段时间写了一个PHP的小程序,有这个需求,参考了Sablog数据安装部分代码,自己也整了一份,记下以备后用。
@header("content-Type: text/html; charset=UTF-8");
error_reporting(0);
$servername = "";//数据库服务器地址
$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 TABLEs+.+s+(.+?).*(ENGINE|TYPE)s*=s*([a-z]+?).*$/isU", "\2", $sql));
$type = in_array($type, array('MYISAM', 'HEAP')) ? $type : 'MYISAM';
return preg_replace("/^s*(CREATE TABLEs+.+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);