php读取sql文件导入数据库(支持phpmyadmin导出)

 更新时间:2016年11月25日 16:38  点击:2075
像这种php读取sql文件导入数据库情况,用得最多的就是数据库备份与还原来了,原理很简单按指定格式导入成.sql文件或利用phpmyadmin导出都可以用本程序来实现导入哦。
 代码如下 复制代码

function into_sql($file)
{
   global $mysql教程_host,$mysql_user,$mysql_password,$mysql_db,$mysql_table_prefix,$dbcharset;//获取数据库配置信息
    mysql_connect($mysql_host,$mysql_user,$mysql_password);
    mysql_select_db($mysql_db);

    if( mysql_get_server_info() < '4.1' )
    //返回 link_identifier 所使用的服务器版本。如果省略 link_identifier,则使用上一个打开的连接。
    {
        $dbcharset='';//设置字符集,如果mysql版本低于4.1,则不设置字符集信息
    }
 if(empty($dbcharset))
 {
  $dbcharset='gbk';
 }
    $dbcharset && mysql_query("set names '$dbcharset'");// 设置字符集
    if( mysql_get_server_info() > '5.0' )
    {
        mysql_query("set sql_mode=''");
    }
    $file2=file_get_contents($file);
 $file2=iconv("utf-8","gbk",$file2);
    $file2=str_replace("seo教程_",$mysql_table_prefix,$file2);//将文件中数据库表前缀换成用户设定的前缀
 
    $file2=explode("n",$file2);//将文件内容按行读入到数组
    $c1=count($file2);
    for($j=0;$j<$c1;$j++)
    {
        $ck=substr($file2[$j],0,4);//取每行的前4个字符
        if( ereg("#",$ck)||ereg("--",$ck) )//去掉注释
        {
            continue;
        }
        $arr[]=$file2[$j];//将去掉注释的文件内容按行读入数组$arr,数组每个元素对应一行
    }
    $read=implode("n",$arr); //重新组织文件内容到一个字符串,(按照原来分好的一行一行的)
    $sql=str_replace("r",'',$read);//去掉"r(回车符)"
    $detail=explode(";n",$sql);
    //将经上述整理过的文件内容再次按一条完整的sql语句(以;和n分隔)导入到数组$detail,
    //此时数组detail的每个元素对应一条完整的sql语句
    $count=count($detail);
    for($i=0;$i<$count;$i++)
    {
        $sql=str_replace("r",'',$detail[$i]);//去掉每行sql中的回车符
        $sql=str_replace("n",'',$sql);//去掉换行符
        $sql=trim($sql);//去掉前后空格
        //现在的$sql
        if($sql)
        {
            if(eregi("create table",$sql))//如果当前的sql语句是创建新表,则考虑版本兼容,以及重设字符集
            {
                //$mysqlv=mysql_get_server_info();
                $sql=preg_replace("/default charset=([a-z0-9]+)/is","",$sql);//去除原来的字符集设置信息
                $sql=preg_replace("/type=myisam/is","engine=myisam",$sql);
                if($dbcharset)
                {
                    $sql=str_replace("engine=myisam"," engine=myisam default charset=$dbcharset ",$sql);
                }
                if(mysql_get_server_info()<'4.1')
                {
                    $sql=preg_replace("/engine=myisam/is","type=myisam",$sql);//
                }
            }
            mysql_query($sql);
        }
    }
}

?>

mysql_affected_rows: 得到 mysql 最后操作影响的列数目。
mysql_close: 关闭 mysql 伺服器连线。
mysql_connect: 开启 mysql 伺服器连线。
mysql_create_db: 建立一个 mysql 新资料库。
mysql_data_seek: 移动内部传回指标。
mysql_db_query: 送查询字串 (query) 到 mysql 资料库。
mysql_drop_db: 移除资料库。
mysql_errno: 传回错误讯息代码。
mysql_error: 传回错误讯息。
mysql_fetch_array: 传回阵列资料。
mysql_fetch_field: 取得栏位资讯。
mysql_fetch_lengths: 传回单列各栏资料最大长度。
mysql_fetch_object: 传回物件资料。
mysql_fetch_row: 传回单列的各栏位。
mysql_field_name: 传回指定栏位的名称。
mysql_field_seek: 设定指标到传回值的某栏位。
mysql_field_table: 获得目前栏位的资料表 (table) 名称。
mysql_field_type: 获得目前栏位的型态。
mysql_field_flags: 获得目前栏位的旗标。
mysql_field_len: 获得目前栏位的长度。
mysql_free_result: 释放传回占用记忆体。
mysql_insert_id: 传回最后一次使用 insert 指令的 id。
mysql_list_fields: 列出指定资料表的栏位 (field)。
mysql_list_dbs: 列出 mysql 伺服器可用的资料库 (database)。
mysql_list_tables: 列出指定资料库的资料表 (table)。
mysql_num_fields: 取得传回栏位的数目。
mysql_num_rows: 取得传回列的数目。
mysql_pconnect: 开启 mysql 伺服器长期连线。
mysql_query: 送出一个 query 字串。
mysql_result: 取得查询 (query) 的结果。
mysql_select_db: 选择一个资料库。
mysql_tablename: 取得资料表名称。

看个连接实例

 代码如下 复制代码
<?php
$mysql_url = "localhost:3306";
$mysql_user = "root";
$mysql_passwd = "root";
$link = @mysql_pconnect($mysql_url,$mysql_user,$mysql_passwd);
@mysql_query("set names 'gbk'"); //设置编码格式
@mysql_close($link)
?>

php连接mysql数据库:这里用mysql_connect函数来连接:

例子:

 代码如下 复制代码
<?
 $link = mysql_connect("localhost","root","sa") or die ('连接mysql数据库失败'.mysql_error());//用mysql连接数据库,如果失败输入错误原因
 if($link){
  echo "mysql数据库连接成功";//如果连接成功,给出提示
 }
?>


在 php 中,这个任务通过 mysql_connect() 函数完成。

语法
mysql_connect(servername,username,password);参数 描述
servername 可选。规定要连接的服务器。默认是 "localhost:3306′。
username 可选。规定登录所使用的用户名。默认值是拥有服务器进程的用户的名称。
password 可选。规定登录所用的密码。默认是 ""。

注释:虽然还存在其他的参数,但上面列出了最重要的参数。请访问 w3school 提供的 php mysql 参考手册,获得更多的细节信息。

例子
在下面的例子中,我们在一个变量中 ($con) 存放了在脚本中供稍后使用的连接。如果连接失败,将执行 "die" 部分:

 代码如下 复制代码
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('could not connect: ' . mysql_error());
  }

// some code

?>关闭连接
脚本一结束,就会关闭连接。如需提前关闭连接,请使用 mysql_close() 函数。

 代码如下 复制代码

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('could not connect: ' . mysql_error());
  }

// some code

mysql_close($con);

打开PHP配置文件php.ini,找到;extension=php_mssql.dll把前面的分号去掉。 2、找到mssql.secure_connection = Off修改成 mssql.secure_connection = On。 3、把PHP文件夹下的php_mssql.dll和ntwdblib.DLL这两个文件拷贝到C:windowssystem32文件夹下

 ----在这里,复制ntwdblib.dll到c:windowssystem32下是失败,原因是该目录下已经存在该dll文件啦.

我重启apache,

*/
$hostname="10.4.250.20"; 
$dbuser="hr"; 
$dbpasswd="946138"; 
$dbname="hr"; 
$conn = mssql_connect($hostname,$dbuser,$dbpasswd) or die("数据库连接错误!"); 
mssql_select_db($dbname,$conn); 
$sql = " select * from pip_staff_s where cstaffid ='z797' "; 
$rowset=mssql_query($sql,$conn); 
$rowcnt=mssql_num_row($rowset);
echo " rows ";
echo $rowset;
echo " end ";

文章提供一款备份还原函数这是利用php写的可以备份也可以还原的函数,同时也支持备份后保存到本地的代码哦,好了下面看源码。

//备份还原函数

 代码如下 复制代码

function write_file($sql,$filename) {
    $re=true;
    if(!@$fp=fopen("./www.111cn.net/".$filename,"w+")) {$re=false; echo "failed to open target file";}
    if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";}
    if(!@fclose($fp)) {$re=false; echo "failed to close target file";}
    return $re;
}
function down_file($sql,$filename){
 ob_end_clean();
 header("content-encoding: none");
 header("content-type: ".(strpos($_server['http_user_agent'], 'msie') ? 'application/octetstream' : 'application/octet-stream'));

 header("content-disposition: ".(strpos($_server['http_user_agent'], 'msie') ? 'inline; ' : 'attachment; ')."filename=".$filename);

 header("content-length: ".strlen($sql));
 header("pragma: no-cache");

 header("expires: 0");
 echo $sql;
 $e=ob_get_contents();
 ob_end_clean();
}

function writeable($dir){
 if(!is_dir($dir)) {
     @mkdir($dir, 0777);
 }
 if(is_dir($dir)){
        if($fp = @fopen("$dir/test.test", 'w')){
            @fclose($fp);
            @unlink("$dir/test.test");
            $writeable = 1;
        }else {
            $writeable = 0;
     }
    }
 return $writeable;
}

function make_header($table){
    global $db;
    $sql="drop table if exists `".$table."`; ";
    $db->query("show create table ".$table);
    $db->nextrecord();
    $tmp=preg_replace("/ /","",$db->f("create table"));
    $sql.=$tmp."; ";
    return $sql;
}

function make_record($table,$num_fields){
    global $db;
    $comma="";
    $sql .= "insert into ".$table." values(";
    for($i = 0; $i < $num_fields; $i++)
    {$sql .= ($comma."'".mysql教程_escape_string($db->record[$i])."'"); $comma = ",";}
    $sql .= "); ";
    return $sql;
}

function show_msg($msgs){
    $i=0;
    $tm1="<table width='100%' border='0'  cellpadding='0' cellspacing='1'><tr><td><font color='red'><b>提示信息:</b></font></td></tr><tr><td><ul>";
    while (list($k,$v)=each($msgs)){
        $i=$i+1;
        $t1="<li>$i.".$v."</li>";
        $t=$t.$t1;
    }
    $tm2="</ul></td></tr></table>";
    return $tm1.$t.$tm2;
}

function pageend(){
    exit();
}

function import($fname) {
    global $db;
    $sqls=file($fname);
        foreach($sqls as $sql){
        str_replace(" ","",$sql);
        str_replace(" ","",$sql);
        if(!$db->query(trim($sql))) return false;
 }
    return true;
}
?>

本款是利用php mysql 数据库操作类函数,他可以删除,修改,增加,备份等对数据库的操作哦,同时还支持两种数据库连接方式 哦,以前数据库编码等的设置。
 代码如下 复制代码

class dbstuff {
 var $querynum = 0;
 var $link;
    var $sqlid;
    var $record;
    var $dbcharset='utf-8';
    var $charset='utf-8';
 function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = true) {
  if($pconnect) {
   if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
    $halt && $this->halt('can not connect to mysql server');
   }
  } else {
   if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw, 1)) {
    $halt && $this->halt('can not connect to mysql server');
   }
  }

  if($this->version() > '4.1') {
   global $charset, $dbcharset;
   if(!$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8'))) {
    $dbcharset = str_replace('-', '', $charset);
   }

   if($dbcharset) {
    @mysql_query("set character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);
   }

   if($this->version() > '5.0.1') {
    @mysql_query("set sql_mode=''", $this->link);
   }
  }

  if($dbname) {
   @mysql_select_db($dbname, $this->link);
  }

 }

 function select_db($dbname) {
  return mysql_select_db($dbname, $this->link);
 }

 function fetch_array($query, $result_type = mysql_assoc) {
  return mysql_fetch_array($query, $result_type);
 }

 function query($sql, $type = '') {
  global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes;

  $func = $type == 'unbuffered' && @function_exists('mysql_unbuffered_query') ?
   'mysql_unbuffered_query' : 'mysql_query';
  if(!($query = $func($sql, $this->link))) {
   if(in_array($this->errno(), array(2006, 2013)) && substr($type, 0, 5) != 'retry') {
    $this->close();
    $this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
    $this->query($sql, 'retry'.$type);
   } elseif($type != 'silent' && substr($type, 5) != 'silent') {
    $this->halt('mysql query error', $sql);
   }
  }

  $this->querynum++;
        $this->sqlid=$query;
  return $query;
 }

 function affected_rows() {
  return mysql_affected_rows($this->link);
 }

 function error() {
  return (($this->link) ? mysql_error($this->link) : mysql_error());
 }

 function errno() {
  return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
 }

 function result($query, $row) {
  $query = @mysql_result($query, $row);
  return $query;
 }

    function result_first($sql) {
  return $this->result($this->query($sql), 0);
 }

 function num_rows($query) {
  $query = mysql_num_rows($query);
  return $query;
 }

 function num_fields($query) {
  return mysql_num_fields($query);
 }

 function free_result($query) {
  return mysql_free_result($query);
 }

 function insert_id() {
  return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("select last_insert_id()"), 0);
 }

 function fetch_row($query) {
  $query = mysql_fetch_row($query);
  return $query;
 }

 function fetch_fields($query) {
  return mysql_fetch_field($query);
 }

 function version() {
  return mysql_get_server_info($this->link);
 }

 function close() {
  return mysql_close($this->link);
 }

    function nr($sql_id="") {
        if(!$sql_id) $sql_id=$this->sqlid;
     return mysql_num_rows($sql_id);
    }

    function nf($sql_id="") {
        if(!$sql_id) $sql_id=$this->sqlid;
        return mysql_num_fields($sql_id);
    }

    function nextrecord($sql_id="") {
        if(!$sql_id) $sql_id=$this->sqlid;
        if($this->record=mysql_fetch_array($sql_id))  return $this->record;
        else return false;
    }

    function f($name) {
        if($this->record[$name]) return $this->record[$name];
        else return false;
    }

    function lock($tblname,$op="write") {
        if(mysql_query("lock tables ".$tblname." ".$op)) return true;
        else return false;
    }

    function unlock()
        {if(mysql_query("unlock tables")) return true; else return false;}

    function ar() {
        return @mysql_affected_rows($this->link);
    }

    function i_id() {
            return mysql_insert_id();
    }

 function halt($message = '', $sql = '') {
  define('cache_forbidden', true);
  include('db_mysql_error.inc.php');
 }
}

?>

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • phpmyadmin config.inc.php配置示例

    phpmyadmin config.inc.php配置示例...2013-09-29
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • PHP连接公司内部服务器的MYSQL数据库的简单实例

    “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • 深入分析C#连接Oracle数据库的连接字符串详解

    本篇文章是对C#连接Oracle数据库的连接字符串进行了详细的分析介绍,需要的朋友参考下...2020-06-25