红穆笔记
首頁 語言筆記 php 導入sql文件到數據庫
語言筆記 PHP PHP採集 PHP與mysql

php 導入sql文件到數據庫

php 导入sql文件到数据库

php導入sql文件到數據庫裏,常用於安裝源碼

封裝了一個類,摘自互聯網


<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/10/13
 * Time: 10:25
 */
class ImportData{
    //數據庫信息
    private $dbhost;
    private $dbuser;
    private $dbpw;
    private $dbport;
    private $dbname;
    private $dbcharset;
    private $link;
    private $tablepre;
    public function __construct($data)
    {
         $this->dbhost=isset($data['dbhost'])?$data['dbhost']:'';
         $this->dbuser=isset($data['dbuser'])?$data['dbuser']:'';
         $this->dbpw=isset($data['dbpw'])?$data['dbpw']:'';
         $this->dbport=isset($data['dbport'])?$data['dbport']:'3306';
         $this->dbname=isset($data['dbname'])?$data['dbname']:'';
         $this->dbcharset=isset($data['dbcharset'])?$data['dbcharset']:'utf8';
         $this->tablepre=isset($data['tablepre'])?$data['tablepre']:'';
         $link_info=$this->link_data();
         if(!$link_info['status']){
             return $link_info;
         }
    }

    //鏈接設置數據庫
    protected function link_data(){
        $link=mysqli_connect($this->dbhost,$this->dbuser,$this->dbpw,null,$this->dbport);
        if(!$link)
            return array('status'=>false,'info'=>'數據庫連接失敗');
        else
            $this->link=$link;
        //mysql 版本
        //獲得mysql版本
        $version = mysqli_get_server_info($this->link);
        //設置字符集
        if($version > '4.1' && $this->dbcharset) {
            mysqli_query($link, "SET NAMES {$this->dbcharset}");
        }
        //選擇數據庫
        mysqli_select_db($this->link,$this->dbname);
    }

    //導數據

    /**
     * @param $dbfile  要導入的sql數據文件
     * @param string $dbfile_table_pre  導入的sql文件的表前綴
     * @return array
     */
    public function import_data($dbfile,$dbfile_table_pre='zq_'){
        if(!file_exists($dbfile)){
           return array('status'=>false,'info'=>'數據庫文件不存在');
        }
        $sql = file_get_contents($dbfile);
        $status=$this->_sql_execute($this->link, $sql,$dbfile_table_pre);
        if($status){
//            echo '導入數據庫成功';
            return array('status'=>true,'info'=>'導入數據庫成功');
        }else{
            return array('status'=>true,'info'=>'導入數據庫失敗');
//            echo '導入數據庫失敗';
        }

    }

    /**
     * @param $link  數據庫鏈接
     * @param $sql   要導入的sql語句
     * @param $dbfile_table_pre 導入的sql文件的表前綴
     * @return bool
     */
   protected function _sql_execute($link,$sql,$dbfile_table_pre) {
        $sqls =$this-> _sql_split($link,$sql,$dbfile_table_pre);
        if(is_array($sqls))
        {
            foreach($sqls as $sql)
            {
                if(trim($sql) != '')
                {
                    mysqli_query($link,$sql);
                }
            }
        }
        else
        {
            mysqli_query($link,$sqls);
        }
        return true;
    }

    /**
     * @param $link  錶鏈接對象
     * @param $sql   導入的sql
     * @param $dbfile_table_pre  sql文件中的sql表前綴
     * @return array
     */
    protected function _sql_split($link,$sql,$dbfile_table_pre) {
        if(mysqli_get_server_info($link) > '4.1' && $this->dbcharset)
        {
            $sql = preg_replace("/TYPE=(InnoDB|MyISAM|MEMORY)( DEFAULT CHARSET=[^; ]+)?/", "ENGINE=\\1 DEFAULT CHARSET=".$this->dbcharset,$sql);
        }
        //如果有表前綴就替換現有的前綴
        if($this->tablepre){
            $sql=str_replace($dbfile_table_pre, $this->tablepre, $sql);
        }
        $sql = str_replace("\r", "\n", $sql);
        $ret = array();
        $num = 0;
        $queriesarray = explode(";\n", trim($sql));
        unset($sql);
        foreach($queriesarray as $query)
        {
            $ret[$num] = '';
            $queries = explode("\n", trim($query));
            $queries = array_filter($queries);
            foreach($queries as $query)
            {
                $str1 = substr($query, 0, 1);
                if($str1 != '#' && $str1 != '-') $ret[$num] .= $query;
            }
            $num++;
        }
        return $ret;
    }
}
/**
 * 初始化數據庫信息
 */
$data=array(
     'dbhost'=>'127.0.0.1'
    ,'dbuser'=>'root'
    ,'dbpw'=>'root'
    ,'dbname'=>'phptest'
);
$obj=new ImportData($data);
$obj->import_data('./zq.sql');
微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

PHP强制转换类型

PHP強制轉換類型 語言筆記 PHP PHP採集 PHP與mysql

獲取數據類型1.如果想查看某個表達式的值和類型,用var_dump()。 2.如果只是想得到一個易讀懂的類型的表達方式用於調試,用 gettype()。3.要查看某個類型,不要用 gettype(),而用is_type() 函數。字符串轉換爲數值當一個字符串被當作數字來求值時,根據以下規則來決定結果…
👁 232
php 特殊字符转义与还原

php 特殊字符轉義與還原 語言筆記 PHP PHP採集 PHP與mysql

轉義字符是一種特殊的字符常量。轉義字符以反斜線"&quot;開頭,後跟一個或幾個字符。轉義字符具有特定的含義,不同於字符原有的意義,故稱“轉義”字符。轉義字符的用處1:將普通字符轉爲特殊用途,如後退鍵,回車鍵等。2:用來將特殊意義的字符轉換回它原來的意義。3:在數據寫入數據庫前,都會使用轉義字符(函…
👁 180
PHP mysqli

PHP mysqli 語言筆記 PHP PHP採集 PHP與mysql

執行鍼對數據庫的查詢:刪除數據庫&lt;?php // 假定數據庫用戶名:root,密碼:123456,數據庫:RUNOOB $con=mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;123456&quot;,&quot;RUN…
👁 232
PHP中mysqli

PHP中mysqli 語言筆記 PHP PHP採集 PHP與mysql

mysqli_num_rows()這個函數只用於SELECT查詢方法而mysqli_affected_rows()函數是記錄上一個sql語句對整個數據庫的影響從而把受影響的數據個數返回,這個主要用於INSERT(插入)、UPDATE(替換)、DELETE(刪除)。
👁 146

推薦閱讀

Linux 查询服务器上大型文件目录

Linux 查詢服務器上大型文件目錄 踩坑總結

你可以使用 du 命令來查詢 Linux 文件系統中每個文件夾的大小,並篩選出其中最大的幾個文件夾。將以下命令輸入到終端中,即可查找所有大於 1GB 的文件夾並按照大小從大到小排序:du -h / | grep '[0-9\.]\+G' | sort -rh其中, / 是需要搜索的根目錄, -h 選…
👁 282
水果蔬菜种植园网站模板 1210

水果蔬菜種植園網站模板 1210 實用收藏 易優模板

一款針對水果蔬菜種植園的eyoucms網站模板。設計風格清新自然,能夠展示種植環境、果蔬產品、採摘體驗及品牌故事。有助於農業企業在線上展示產品,拓展銷售渠道。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(Eyou…
👁 67
(自适应手机端)SEO优化网络公司网站模板 0958

(自適應手機端)SEO優化網絡公司網站模板 0958 實用收藏 pbootcms模板

一款SEO優化網絡公司PbootCMS網站模板,支持PC與WAP端。設計風格科技營銷,適合SEO服務商、網絡公司展示案例與優化成果。有助於互聯網營銷公司在線上吸引企業客戶。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn相關文章P…
👁 40
响应式茶叶普洱茶产品展示类模板 1211

響應式茶葉普洱茶產品展示類模板 1211 實用收藏 易優模板

此套eyoucms響應式模板適用於茶葉與普洱茶產品展示,設計風格古典雅緻,能夠展示普洱茶產品、品牌故事、茶道文化及銷售信息。有助於普洱茶品牌在線上展示產品,吸引茶愛好者。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CM…
👁 31