• php读取txt文件组成SQL并插入数据库(原创自Zjmainstay)


    /**
     * $splitChar 字段分隔符
     * $file 数据文件文件名
     * $table 数据库表名
     * $conn 数据库连接
     * $fields 数据对应的列名
     * $insertType 插入操作类型,包括INSERT,REPLACE
     */
    function loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields=array(),$insertType='INSERT'){}

    View Code
    <?php
    /**
     * $splitChar 字段分隔符
     * $file 数据文件文件名
     * $table 数据库表名
     * $conn 数据库连接
     * $fields 数据对应的列名
     * $insertType 插入操作类型,包括INSERT,REPLACE
     */
    function loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields=array(),$insertType='INSERT'){
        if(empty($fields)) $head = "{$insertType} INTO `{$table}` VALUES('";
        else $head = "{$insertType} INTO `{$table}`(`".implode('`,`',$fields)."`) VALUES('";    //数据头
        $end = "')";
        $sqldata = trim(file_get_contents($file));
        if(preg_replace('/\s*/i','',$splitChar) == '') {
            $splitChar = '/(\w+)(\s+)/i';
            $replace = "$1','";
            $specialFunc = 'preg_replace';
        }else {
            $splitChar = $splitChar;
            $replace = "','";
            $specialFunc = 'str_replace';
        }
        //处理数据体,二者顺序不可换,否则空格或Tab分隔符时出错
        $sqldata = preg_replace('/(\s*)(\n+)(\s*)/i','\'),(\'',$sqldata);    //替换换行
        $sqldata = $specialFunc($splitChar,$replace,$sqldata);                //替换分隔符
        $query = $head.$sqldata.$end;    //数据拼接
        if(mysql_query($query,$conn)) return array(true);
        else {
            return array(false,mysql_error($conn),mysql_errno($conn));
        }
    }
    
    //调用示例1
    require 'db.php';
    $splitChar = '|';    //竖线
    $file = 'sqldata1.txt';
    $fields = array('id','parentid','name');
    $table = 'cengji';
    $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
    if (array_shift($result)){
        echo 'Success!<br/>';
    }else {
        echo 'Failed!--Error:'.array_shift($result).'<br/>';
    }
    /*sqlda ta1.txt
    1|0|A
    2|1|B
    3|1|C
    4|2|D
    
    -- cengji
    CREATE TABLE `cengji` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `parentid` int(11) NOT NULL,
      `name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `parentid_name_unique` (`parentid`,`name`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=1602 DEFAULT CHARSET=utf8
    */
    
    //调用示例2
    require 'db.php';
    $splitChar = ' ';    //空格
    $file = 'sqldata2.txt';
    $fields = array('id','make','model','year');
    $table = 'cars';
    $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
    if (array_shift($result)){
        echo 'Success!<br/>';
    }else {
        echo 'Failed!--Error:'.array_shift($result).'<br/>';
    }
    /* sqldata2.txt
    11 Aston DB19 2009
    12 Aston DB29 2009
    13 Aston DB39 2009
    
    -- cars
    CREATE TABLE `cars` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `make` varchar(16) NOT NULL,
      `model` varchar(16) DEFAULT NULL,
      `year` varchar(16) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
    */
    
    //调用示例3
    require 'db.php';
    $splitChar = '    ';    //Tab
    $file = 'sqldata3.txt';
    $fields = array('id','make','model','year');
    $table = 'cars';
    $insertType = 'REPLACE';
    $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields,$insertType);
    if (array_shift($result)){
        echo 'Success!<br/>';
    }else {
        echo 'Failed!--Error:'.array_shift($result).'<br/>';
    }
    /* sqldata3.txt
    11    Aston    DB19    2009
    12    Aston    DB29    2009
    13    Aston    DB39    2009 
    */
    
    //调用示例4
    require 'db.php';
    $splitChar = '    ';    //Tab
    $file = 'sqldata3.txt';
    $fields = array('id','value');
    $table = 'notExist';    //不存在表
    $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
    if (array_shift($result)){
        echo 'Success!<br/>';
    }else {
        echo 'Failed!--Error:'.array_shift($result).'<br/>';
    }
    
    //附:db.php
    /*    //注释这一行可全部释放
    ?>
    <?php
    static $connect = null;
    static $table = 'jilian';
    if(!isset($connect)) {
        $connect = mysql_connect("localhost","root","");
        if(!$connect) {
            $connect = mysql_connect("localhost","Zjmainstay","");
        }
        if(!$connect) {
            die('Can not connect to database.Fatal error handle by /test/db.php');
        }
        mysql_select_db("test",$connect);
        mysql_query("SET NAMES utf8",$connect);
        $conn = &$connect;
        $db = &$connect;
    }
    ?>
    //*/

    -- 数据表结构:

    -- 100000_insert,1000000_insert

    CREATE TABLE `100000_insert` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `parentid` int(11) NOT NULL,
      `name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

     100000 (10万)行插入:Insert 100000_line_data use 2.5534288883209 seconds

     1000000(100万)行插入:Insert 1000000_line_data use 19.677318811417 seconds

    //可能报错:MySQL server has gone away

    //解决:修改my.ini/my.cnf   max_allowed_packet=20M

  • 相关阅读:
    Samba.conf案例 Ubuntu
    samba服務器下文件夾chmod權限技巧
    华为AR1220
    vsftpd.conf案例
    FTP指令说明
    Ubuntu 16.04 LTS 搭建LAMP
    记录踩过的坑——代理IP
    重写验证时重定向
    顶级页面
    文件中用WriteLine追加内容的两种方法
  • 原文地址:https://www.cnblogs.com/Zjmainstay/p/php_loadTxtDataIntoDatabase.html
Copyright © 2020-2023  润新知