PHP将Sql文件导入到MySql

网络整理 - 08-24

  在发布自己的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);