PHP操作MySQL数据库的常用方法

 更新时间:2016年11月25日 16:35  点击:2007
在php中操作mysql数据库的方法有常用的三种,我们使用最多的估计是mysql或mysqli当然还有一个pdo_mysql了,下面整理了一些例子给各位参考

一.mysql数据库

 代码如下 复制代码

<?php
$conn=mysql_connect("localhost", "root", "123456") or die("数据库连接失败");
mysql_select_db("test") or die("选择数据库失败");;
$sql="select * from user";
$data=mysql_query($sql);
echo '<table border="1" align="center" width="800">'
while($row=mysql_fetch_assoc($result)){
echo '<tr>';
foreach($row as $col){
echo '<td>'.$col.'</td>';
}
echo '</tr>';
};
echo '</table>';
mysql_close();

补充

 代码如下 复制代码

 // 从表中提取信息的sql语句
$strsql="SELECT * FROM `gbook`";
// 执行sql查询
$result=mysql_db_query($mysql_database, $strsql, $conn);
// 获取查询结果
$row=mysql_fetch_row($result);

 
echo '<font face="verdana">';
echo '<table border="1" cellpadding="1" cellspacing="2">';

// 显示字段名称
echo "</b><tr></b>";
for ($i=0; $i<mysql_num_fields($result); $i++)
{
  echo '<td bgcolor="#000F00"><b>'.
  mysql_field_name($result, $i);
  echo "</b></td></b>";
}
echo "</tr></b>";
// 定位到第一条记录
mysql_data_seek($result, 0);
// 循环取出记录
while ($row=mysql_fetch_row($result))
{
  echo "<tr></b>";
  for ($i=0; $i<mysql_num_fields($result); $i++ )
  {
echo '<td bgcolor="#00FF00">';
echo $row[$i];
echo '</td>';
  }
  echo "</tr></b>";
}
  
echo "</table></b>";
echo "</font>";
// 释放资源
mysql_free_result($result);
// 关闭连接
mysql_close($conn); 

二.pdo_mysql(推荐)

连接:

 代码如下 复制代码


$dsn = "mysql:host=localhost;dbname=test";
$username = 'root';
$password = '123456';
$options = array(
   PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);

$pdo = new PDO($dsn, $username, $password, $options);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
增:

方法1: 绑定关联数组

$str=$pdo->prepare("INSERT INTO `user` (`username`, `password`) VALUES (:username,:password)");
$str->execute(array(":username"=>"test", ":password"=>"passwd"));

方法2: 绑定索引数组


$str=$pdo->prepare("INSERT INTO `user` (`username`, `password`) VALUES (?,?)");
$str->execute(array("test", "passwd"));
删:


$str=$pdo->prepare("delete from user where id > 3");
$str->execute();

改:

$str=$pdo->prepare("UPDATE `user` SET username=:username,password=:password where id=:id");
$str->execute(array(":username"=>"test", ":password"=>"passwd", ":id"=>"3"));
查:
方法1: 单个取出,循环遍历,返回到数组

$str=$pdo->prepare("select * from user where id > :id  order by id");
$str->execute(array(":id"=>2));
$str->setFetchMode(PDO::FETCH_ASSOC);
//共三种:1.PDO::FETCH_BOTH(默认)  2.FETCH_ASSOC  3.FTECH_NUM
 
while($data=$str->fetch()){
print_r($data);
echo '<br>';
}

方法2: 全部取出,返回到二维数组


$str=$pdo->prepare("select * from user order by fid");
$str->execute();
$data=$str->fetchAll(PDO::FETCH_NUM);
print_r($data);

方法3:单个取出,循环遍历,绑定字段名到变量


$str=$pdo->prepare("select fid,username,password from user order by id");
$str->execute();
 
$str->bindColumn("id",$id);
$str->bindColumn("username",$username);
$str->bindColumn(3,$password);
 
while($str->fetch()){
echo "$id | $username | $password <br>";
}
echo "总记录数:".$str->rowCount()."<br>";
echo "总字段数:".$str->columnCount()."<br>";


二.mysqli

 代码如下 复制代码

(用mysqli链接MYSQL数据库)
requery_once("config.ini.php");
$mysqliObj = new mysqli($dbhost,$dbuser,$dbpwd,$dbname);
if(mysqli_connect_errno()){
 echo "连接失败".mysqli_connect_error();
 exit();
}
$mysqliObj->query("set name $charName");

(其他操作)
 
查询
-----------------------------------------------------
(单条查询)
$sql = "drop table  if exists user;";
$mysqliObj->query($sql);
 
(多条查询)
$musqliObj->multip_query($sql)
 
 
 
返回执行$sql受影响的行数()
----------------------------------------------------
if($mysqliObj->query($sql))
echo $mysqliObj->affected_rows;
 
insert 插入时,返回插入的id (很有用)
---------------------------------------------------
 $num = $mysqliObj->insert_id;

<?php
$mysqli=new mysqli("localhost", "root", "123456", "test");
$sql="select * from user  order by id";
$result=$mysqli->query($sql);
echo '<table align="center" border="1" width="800">';
while($row=$result->fetch_assoc()){
echo '<tr>';
foreach($row as $col){
echo '<td>'.$col.'</td>';
}
echo '</tr>';
}
echo '</table>';
$mysqli->close();


三种处理查询结果
-------------------------------------------------------
 

 代码如下 复制代码
$sql = "select * from user";
 $result = $mysqli->query($sql);
 
(1)fetch_row()   返回索引数组
fetch_row()
while(list($id,$name,$pwd)=$result->fetch_row()){
echo "id: ".$id." name:".$name."  pwd:".$pwd."<br>";
 
}
(2)fetch_assoc()  返回关联数组
fetch_assoc()
while ($row = $result->fetch_assoc()){
 echo "id:".$row["userId"]." name:".$row["userName"]."  pwd:".$row["password"]."<br>";
}
 
(3)fetch_object()返回对象
while($row = $result->fetch_object()){
echo "id:".$row->userId." name:".$row->uerName."  pwd:".$row->password."<br>";
 
}
我相信很多朋友还不知道如何来批量删除不要的数据,单使用php 批量删除数据我们需要结合mysql的in条件来实现了,这个估计大家看了这句话就明白如何做了,下面我就来给需要了解的朋友详细分析批量删除数据过程。

我们删除需要的sql语法

delete from aaaa where id in(1,2,3)这里面的1,2,3就是我们需要删除的记录了

那么在php中如何来做

1、首先在文章列表页面(list.php),将多选筐命名为:“$del_id[]”,值为文章ID号。
 例如(list.php):

 代码如下 复制代码

<form name="del_form" action="del.php" method="post">
<?php
$result=mysql_query("select * from news");
while($rs=mysql_fetch_array($result)){
 ?>
<input name="del_id[]" type="checkbox" id="del_id[]" value="<?=$rs[id]?>" /><?=$rs[title]?>
 <?php
}
 ?>
 </form>

2、处理页面(del.php):

<?php
 if($del_id!=""){
 $del_num=count($del_id);
 for($i=0;$i<$del_num;$i++){
 mysql_query("Delete from news where id='$del_id[$i]'");
 }
 echo("<script type='text/javascript'>alert('删除成功!');history.back();</script>");
}else{
 echo("<script type='text/javascript'>alert('请先选择项目!');history.back();</script>");
}
?>

案例分析:

上面批量核心代码是 表单名为del_id[]与

 代码如下 复制代码

for($i=0;$i<$del_num;$i++){
 mysql_query("Delete from news where id='$del_id[$i]'");
}

这个就是获取提交过来的数组然后我们再遍历一条条删除了这个与我们最前面的说法更小一样,其实我们可以加地改进

 代码如下 复制代码

$ids = implode(',',$_POST['del_id']);
$sql ="delete from aaaa where id in($ids)";
mysql_query($Sql);


这样就可以简少很多的语句哦,当然上面需要判断提交过来的是不是数组了,最后我们对del.php文件进行代码优化删除操作

 代码如下 复制代码

<?php
 if(is_array($del_id)){
 
$ids = implode(',',$_POST['del_id']);
$sql ="delete from aaaa where id in($ids)";
 if( mysql_query($Sql))
{
echo '删除成功';
}
else
{
echo '删除失败';
}
}

 
}
?>

Redis在性能上比mysql好点之外但在数据操作上的复杂度我们觉得非常的麻烦,像分页这种做法感觉非常不好使。

用上redis之后速度上去的结果就是操作数据的复杂性了、分页有种脱了裤子放屁的感觉。但是也没有别的办法。代码如下

 

 代码如下 复制代码

<?php
$redis = new Redis;
$redis->connect('127.0.0.1',6379,0);

//数据库
$host='********';
$user='root';
$psd='****';
$dbname='ask';

 


$link = mysql_connect($host,$user,$psd);
mysql_select_db($dbname,$link);
mysql_query("set names utf8");

 


$SQL = "SELECT * FROM question LIMIT 100";
$query = mysql_query($SQL);
$questionName = 'questionName';
while($info = mysql_fetch_array($query)){
$list[] = $info;
$redisName = 'Question_id_'.$info['id'];
$redis->hMset($redisName, $info);
$redis->zAdd($questionName,$info['id'],$info['id']);
$i++;
}
$range = $redis->zRevRange($questionName,0,10); //分页用到的主要函数
foreach($range as $qid){
$pageList[] = $redis->hGetAll('Question_id_'.$qid);
}
print_r($pageList);
?>

 
只是在做例子的时候随便敲敲、完全没有代码规范。请自己封装 基本用上的方法就是Reids的 hMset(),zAdd(), hGetAll(),zRevRange();如有不明白可以查看redis手册,或者与松林讨论。

php有强大的功能不但可以支持mysql,mssql,mysqli之个我们还可以与oracle数据连接哦,要让php支持oracle非常的简单我们只要把php.ini中的;extention = php_oci8.dll分号去掉即可。

记php支持oracle连接函数

php.ini文件中的配置,去掉  ;extention = php_oci8.dll,去掉前面的分号
重启apache就可以了,
如果不行,我们再把php目录中的php_oci8.dll拷到windows系统的system32下面去吧。
oracle数据库建立链接

 代码如下 复制代码

1.$conn = oci_connect('username','password',"(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=192.168.1.100)(PORT = 1521))(CONNECT_DATA =(SID=test)))");

2.$conn = oci_connect('username','password','192.168.1.100/test');

3.Oracle 连接方法:

set adocon=Server.Createobject("adodb.connection")
adocon.open"Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"

4.Oracle OLE DB 连接方法:

set adocon=Server.Createobject("adodb.connection")
adocon.open"Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"

有的时候第一种方式不行,使用第二种,里面的几个参数分别是用户名、密码、oracle服务地址,其中test是服务名。

 代码如下 复制代码

$sql = "select * from table_exmaple"
$ora_test = oci_parse($conn,$sql);  //编译sql语句
oci_execute($ora_test,OCI_DEFAULT);  //执行
while($r=oci_fetch_row($ora_test))  //取回结果
{
echo $ora_test[0];
echo "<BR>"; 
}

看个完整的例子

如果PHP版本>5.0,那么使用下面的函数

oci_connect ( username, password , dbname )

例子:

 代码如下 复制代码

<?php

$conn = oci_connect('hr', 'hr', 'orcl'); // 建立连接

if (!$conn) {

$e = oci_error();

print htmlentities($e['message']);

exit;

}

$query = 'SELECT * FROM DEPARTMENTS'; // 查询语句

$stid = oci_parse($conn, $query); // 配置SQL语句,准备执行

if (!$stid) {

$e = oci_error($conn);

print htmlentities($e['message']);

exit;

}

$r = oci_execute($stid, OCI_DEFAULT); // 执行SQL。OCI_DEFAULT表示不要自动commit

if(!$r) {

$e = oci_error($stid);

echo htmlentities($e['message']);

exit;

}

// 打印执行结果

print '<table border="1">';

while($row = oci_fetch_array($stid, OCI_RETURN_NULLS)) {

print '<tr>';

foreach($row as $item) {

print '<td>'.($item?htmlentities($item):' ').'</td>';

}

print '</tr>';

}

print '</table>';

oci_close($conn);

?>

这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可,下面我们一起来看这个例子。
 代码如下 复制代码

<?php 
/**
 * 创建时间: 2012年5月21日
 *
 * 说明:分卷文件是以_v1.sql为结尾(20120522021241_all_v1.sql)
 * 功能:实现mysql数据库分卷备份,选择表进行备份,实现单个sql文件及分卷sql导入
 * 使用方法:
 *
 * ------1. 数据库备份(导出)------------------------------------------------------------
//分别是主机,用户名,密码,数据库名,数据库编码
$db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );
// 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)
$db->backup ();
 * ------2. 数据库恢复(导入)------------------------------------------------------------
//分别是主机,用户名,密码,数据库名,数据库编码
$db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );
//参数:sql文件
$db->restore ( './backup/20120516211738_all_v1.sql');
 *----------------------------------------------------------------------
 */
class DBManage 

    var $db; // 数据库连接 
    var $database; // 所用数据库 
    var $sqldir; // 数据库备份文件夹 
    var $record; 
    // 换行符 
    private $ds = "n"; 
    // 存储SQL的变量 
    public $sqlContent = ""; 
    // 每条sql语句的结尾符 
    public $sqlEnd = ";"; 
    /**
     * 初始化
     *
     * @param string $host
     * @param string $username
     * @param string $password
     * @param string $thisatabase
     * @param string $charset
     */
    function __construct($host = 'localhost', $username = 'root', $password = '', $thisatabase = 'test', $charset = 'utf8') 
    { 
        $this->host = $host; 
        $this->username = $username; 
        $this->password = $password; 
        $this->database = $thisatabase; 
        $this->charset = $charset; 
        // 连接数据库 
        $this->db = mysql_connect ( $this->host, $this->username, $this->password ) or die ( "数据库连接失败." ); 
        // 选择使用哪个数据库 
        mysql_select_db ( $this->database, $this->db ) or die ( "无法打开数据库" ); 
        // 数据库编码方式 
        mysql_query ( 'SET NAMES ' . $this->charset, $this->db ); 
    } 
  
    /*
      * ------------------------------------------数据库备份start----------------------------------------------------------
      */
  
    /**
     * 数据库备份
     * 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)
     *
     * @param $string $dir
     * @param int $size
     * @param $string $tablename
     */
    function backup($tablename = '', $dir = '', $size = 2000) 
    { 
        //$dir = $dir ? $dir : 'backup/'; 
        //$size = $size ? $size : 2000; 
        $sql = ''; 
        // 只备份某个表 
        if (! empty ( $tablename )) 
        { 
            echo '正在备份表' . $tablename . '<br />'; 
            // 插入dump信息 
            $sql = $this->_retrieve(); 
            // 插入表结构信息 
            $sql .= $this->_insert_table_structure ( $tablename ); 
            // 插入数据 
            $data = mysql_query ( "select * from " . $tablename ); 
            // 文件名前面部分 
            $filename = date ( 'YmdHis' ) . "_" . $tablename; 
            // 字段数量 
            $num_fields = mysql_num_fields ( $data ); 
            // 第几分卷 
            $p = 1; 
            // 循环每条记录 
            while ( $record = mysql_fetch_array ( $data ) ) 
            { 
                // 单条记录 
                $sql .= $this->_insert_record ( $tablename, $num_fields, $record ); 
                // 如果大于分卷大小,则写入文件 
                if (strlen ( $sql ) >= $size * 1000) 
                { 
                    $file = $filename . "_v" . $p . ".sql"; 
                    if ($this->_write_file ( $sql, $file, $dir )) 
                    { 
                        echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />"; 
                    } 
                    else
                    { 
                        echo "备份表-" . $tablename . "-失败<br />"; 
                    } 
                    // 下一个分卷 
                    $p ++; 
                    // 重置$sql变量为空,重新计算该变量大小 
                    $sql = ""; 
                } 
            } 
            // sql大小不够分卷大小 
            if ($sql != "") 
            { 
                $filename .= "_v" . $p . ".sql"; 
                if ($this->_write_file ( $sql, $filename, $dir )) 
                { 
                    echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />"; 
                } 
                else
                { 
                    echo "备份卷-" . $p . "-失败<br />"; 
                } 
            } 
        } 
        else
        { // 备份全部表 
            if ($tables = mysql_query ( "show table status from " . $this->database )) 
            { 
                echo "读取数据库结构成功!<br />"; 
            } 
            else
            { 
                exit ( "读取数据库结构成功!<br />" ); 
            } 
            // 插入dump信息 
            $sql .= $this->_retrieve(); 
            // 文件名前面部分 
            $filename = date ( 'YmdHis' ) . "_all"; 
            // 查出所有表 
            $tables = mysql_query ( 'SHOW TABLES' ); 
            // 第几分卷 
            $p = 1; 
            // 循环所有表 
            while ( $table = mysql_fetch_array ( $tables ) ) 
            { 
                // 获取表名 
                $tablename = $table [0]; 
                // 获取表结构 
                $sql .= $this->_insert_table_structure ( $tablename ); 
                $data = mysql_query ( "select * from " . $tablename ); 
                $num_fields = mysql_num_fields ( $data ); 
  
                // 循环每条记录 
                while ( $record = mysql_fetch_array ( $data ) ) 
                { 
                    // 单条记录 
                    $sql .= $this->_insert_record ( $tablename, $num_fields, $record ); 
                    // 如果大于分卷大小,则写入文件 
                    if (strlen ( $sql ) >= $size * 1000) 
                    { 
  
                        $file = $filename . "_v" . $p . ".sql"; 
                        // 写入文件 
                        if ($this->_write_file ( $sql, $file, $dir )) 
                        { 
                            echo "-卷-" . $p . "-数据备份完成,生成备份文件<span style='color:#f00;'>$dir$file</span><br />"; 
                        } 
                        else
                        { 
                            echo "备份卷-" . $p . "-失败<br />"; 
                        } 
                        // 下一个分卷 
                        $p ++; 
                        // 重置$sql变量为空,重新计算该变量大小 
                        $sql = ""; 
                    } 
                } 
            } 
            // sql大小不够分卷大小 
            if ($sql != "") 
            { 
                $filename .= "_v" . $p . ".sql"; 
                if ($this->_write_file ( $sql, $filename, $dir )) 
                { 
                    echo "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename<br />"; 
                } 
                else
                { 
                    echo "备份卷-" . $p . "-失败<br />"; 
                } 
            } 
        } 
    } 
  
    /**
     * 插入数据库备份基础信息
     *
     * @return string
     */
    private function _retrieve() { 
        $value = ''; 
        $value .= '--' . $this->ds; 
        $value .= '-- MySQL database dump' . $this->ds; 
        $value .= '-- Created by DBManage class, Power By yanue. ' . $this->ds; 
        $value .= '-- http://yanue.net ' . $this->ds; 
        $value .= '--' . $this->ds; 
        $value .= '-- 主机: ' . $this->host . $this->ds; 
        $value .= '-- 生成日期: ' . date ( 'Y' ) . ' 年  ' . date ( 'm' ) . ' 月 ' . date ( 'd' ) . ' 日 ' . date ( 'H:i' ) . $this->ds; 
        $value .= '-- MySQL版本: ' . mysql_get_server_info () . $this->ds; 
        $value .= '-- PHP 版本: ' . phpversion () . $this->ds; 
        $value .= $this->ds; 
        $value .= '--' . $this->ds; 
        $value .= '-- 数据库: `' . $this->database . '`' . $this->ds; 
        $value .= '--' . $this->ds . $this->ds; 
        $value .= '-- -------------------------------------------------------'; 
        $value .= $this->ds . $this->ds; 
        return $value; 
    } 
  
    /**
     * 插入表结构
     *
     * @param unknown_type $table
     * @return string
     */
    private function _insert_table_structure($table) { 
        $sql = ''; 
        $sql .= "--" . $this->ds; 
        $sql .= "-- 表的结构" . $table . $this->ds; 
        $sql .= "--" . $this->ds . $this->ds; 
  
        // 如果存在则删除表 
        $sql .= "DROP TABLE IF EXISTS `" . $table . '`' . $this->sqlEnd . $this->ds; 
        // 获取详细表信息 
        $res = mysql_query ( 'SHOW CREATE TABLE `' . $table . '`' ); 
        $row = mysql_fetch_array ( $res ); 
        $sql .= $row [1]; 
        $sql .= $this->sqlEnd . $this->ds; 
        // 加上 
        $sql .= $this->ds; 
        $sql .= "--" . $this->ds; 
        $sql .= "-- 转存表中的数据 " . $table . $this->ds; 
        $sql .= "--" . $this->ds; 
        $sql .= $this->ds; 
        return $sql; 
    } 
  
    /**
     * 插入单条记录
     *
     * @param string $table
     * @param int $num_fields
     * @param array $record
     * @return string
     */
    private function _insert_record($table, $num_fields, $record) { 
        // sql字段逗号分割 
        $insert = $comma = ""; 
        $insert .= "INSERT INTO `" . $table . "` VALUES("; 
        // 循环每个子段下面的内容 
        for($i = 0; $i < $num_fields; $i ++) { 
            $insert .= ($comma . "'" .mysql_real_escape_string ( $record [$i] ) . "'"); 
            $comma = ","; 
        } 
        $insert .= ");" . $this->ds; 
        return $insert; 
    } 
  
    /**
     * 写入文件
     *
     * @param string $sql
     * @param string $filename
     * @param string $dir
     * @return boolean
     */
    private function _write_file($sql, $filename, $dir) { 
        $dir = $dir ? $dir : './backup/'; 
        // 不存在文件夹则创建 
        if (! file_exists ( $dir )) { 
            mkdir ( $dir ); 
        } 
        $re = true; 
        if (! @$fp = fopen ( $dir . $filename, "w+" )) { 
            $re = false; 
            echo "打开文件失败!"; 
        } 
        if (! @fwrite ( $fp, $sql )) { 
            $re = false; 
            echo "写入文件失败,请文件是否可写"; 
        } 
        if (! @fclose ( $fp )) { 
            $re = false; 
            echo "关闭文件失败!"; 
        } 
        return $re; 
    } 
  
    /*
      *
      * -------------------------------上:数据库导出-----------分割线----------下:数据库导入--------------------------------
      */
  
    /**
     * 导入备份数据
     * 说明:分卷文件格式20120516211738_all_v1.sql
     * 参数:文件路径(必填)
     *
     * @param string $sqlfile
     */
    function restore($sqlfile) 
    { 
        // 检测文件是否存在 
        if (! file_exists ( $sqlfile )) 
        { 
            exit ( "文件不存在!请检查" ); 
        } 
        $this->lock ( $this->database ); 
        // 获取数据库存储位置 
        $sqlpath = pathinfo ( $sqlfile ); 
        $this->sqldir = $sqlpath ['dirname']; 
        // 检测是否包含分卷,将类似20120516211738_all_v1.sql从_v分开,有则说明有分卷 
        $volume = explode ( "_v", $sqlfile ); 
        $volume_path = $volume [0]; 
        echo "请勿刷新及关闭浏览器以防止程序被中止,如有不慎!将导致数据库结构受损<br />"; 
        echo "正在导入备份数据,请稍等!<br />"; 
        if (empty ( $volume [1] )) 
        { 
            echo "正在导入sql:<span style='color:#f00;'>" . $sqlfile . '</span><br />'; 
            // 没有分卷 
            if ($this->_import ( $sqlfile )) { 
                echo "数据库导入成功!"; 
            } 
            else
            { 
                exit ( '数据库导入失败!' ); 
            } 
        } 
        else
        { 
            //$volume_id = array(); 
            // 存在分卷,则获取当前是第几分卷,循环执行余下分卷 
            $volume_id = explode ( ".sq", $volume [1] ); 
            // 当前分卷为$volume_id 
            $volume_id = intval ( $volume_id [0] ); 
            while ( $volume_id ) 
            { 
                $tmpfile = $volume_path . "_v" . $volume_id . ".sql"; 
                // 存在其他分卷,继续执行 
                if (file_exists ( $tmpfile )) { 
                    // 执行导入方法 
                    echo "正在导入分卷<span style='color:#f00;'>" . $tmpfile . '</span><br />'; 
                    if ($this->_import ( $tmpfile )) 
                    { 
  
                    } 
                    else
                    { 
                        exit ( "导入分卷<span style='color:#f00;'>" . $tmpfile . '</span>失败!可能是数据库结构已损坏!请尝试从分卷1开始导入' ); 
                    } 
                } 
                else
                { 
                    echo "此分卷备份全部导入成功!<br />"; 
                    return; 
                } 
                $volume_id++; 
            } 
        } 
    } 
  
    /**
     * 将sql导入到数据库(普通导入)
     *
     * @param string $sqlfile
     * @return boolean
     */
    private function _import($sqlfile) { 
        // sql文件包含的sql语句数组 
        $sqls = array (); 
        $f = fopen ( $sqlfile, "rb" ); 
        // 创建表缓冲变量 
        $create = ''; 
        while ( ! feof ( $f ) ) { 
            // 读取每一行sql 
            $line = fgets ( $f ); 
            // 如果包含'-- '等注释,或为空白行,则跳过 
            if (trim ( $line ) == '' || preg_match ( '/--*?/', $line, $match )) { 
                continue; 
            } 
            // 如果结尾包含';'(即为一个完整的sql语句,这里是插入语句),并且不包含'ENGINE='(即创建表的最后一句), 
            if (! preg_match ( '/;/', $line, $match ) || preg_match ( '/ENGINE=/', $line, $match )) { 
                // 将本次sql语句与创建表sql连接存起来 
                $create .= $line; 
                // 如果包含了创建表的最后一句 
                if (preg_match ( '/ENGINE=/', $create, $match )) { 
                    // 则将其合并到sql数组 
                    $sqls [] = $create; 
                    // 清空当前,准备下一个表的创建 
                    $create = ''; 
                } 
                // 跳过本次 
                continue; 
            } 
            $sqls [] = $line; 
        } 
        fclose ( $f ); 
        // 循环sql语句数组,分别执行 
        foreach ( $sqls as $sql ) { 
            str_replace ( "n", "", $sql ); 
            if (! mysql_query ( trim ( $sql ) )) { 
                echo mysql_error (); 
                return false; 
            } 
        } 
        return true; 
    } 
  
    /*
      * -------------------------------数据库导入end---------------------------------
      */
  
    // 关闭数据库连接 
    private function close() { 
        mysql_close ( $this->db ); 
    } 
  
    // 锁定数据库,以免备份或导入时出错 
    private function lock($tablename, $op = "WRITE") { 
        if (mysql_query ( "lock tables " . $tablename . " " . $op )) 
            return true; 
        else
            return false; 
    } 
  
    // 解锁 
    private function unlock() { 
        if (mysql_query ( "unlock tables" )) 
            return true; 
        else
            return false; 
    } 
  
    // 析构 
    function __destruct() { 
        mysql_query ( "unlock tables", $this->db ); 
        mysql_close ( $this->db ); 
    } 
}
 
$db = new DBManage ( 'localhost', 'root', '', 'tao', 'gbk' );
//$db->backup ('tao_admin'); 
$db->restore ( './backup/20140228222713_tao_admin_v1.sql');
[!--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
  • C# 10个常用特性汇总

    这篇文章主要介绍了C# 10个常用特性,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-09
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • c#异步读取数据库与异步更新ui的代码实现

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

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

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
  • PHP连接公司内部服务器的MYSQL数据库的简单实例

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

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