php把excel表格中的数据导入到mysql数据库

时间:2022-04-26 06:45:19

最近要用到excel的导入功能,我自己需要页面有文件的提交,然后转入后台进行处理,之后在前台页面显示结果就好了,上网找了一下,最终根据一位网友的分享,结合自己的实际情况写了如下文章:

显示页面index.php

<?php
/**
 * 导入excel的显示层
 * 2014/7/24        @author Lee
 */

?>
<form action="savetomysql.php" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000000">  <!-- 上传大小不超过2M value="2000000"-->
    <input type="file" name="file" id="file" />
    <br />
    <input type="submit" name="submit" value="Submit" />
</form>
<div id="show" name="show"></div>

后台处理:savetomysql.php
<?php
header('content-type:text/html;charset=utf-8');
/*
* excel导入到mysql过程
* author lee
* web http://www.diao48.com
*/
new saveToMysql();
class saveToMysql {
    var $excPath ;    //excel表的路径    
    var $name;                //要上传的文件的名字
    var $type;                //要上传的文件类型
    var $size;                //要上传的文件大小
    var $tmp_name;            //要上传的文件路径        
        
    var $server_name ;            //数据库服务器
    var $user ;                 //数据库用户名
    var $password ;                //数据库密码
    var $database ;                //选择的数据库名
    var $table ;                //表名
    var $conn ;                    //数据库连接对象
    
    /*
     * 导入类的构造函数
     */
    function __construct() {
        $this->conn();
        $this->tbname='member';                            //表名
        $this->excPath = './excel/Book1.xls';            //excel文件地址
        
        $this->getFile();
        if ($this->impExcel()) {
            exit('ok');
        }
    }//end func construct
    
    /*
     * 从提交的表单中获取文件的信息,关键是获取文件的临时存放路径
     */
    function getFile(){
        $resuArr = $this->upload();
        foreach ($resuArr as $key=>$value){
            $this->$key = $resuArr[$key];        
        }//end foreach()        
    }//end func getFile
    
    /*
     * 读取excel文件内容,并导入到数据库中去
     */
    function impExcel(){
        /* 连接excel表(用法与access数据库类似) */
        $conn=new com("adodb.connection");
        $connstr="Driver={Microsoft Excel Driver (*.xls)};DBQ=".realpath("$this->tmp_name");//$this->tmp_name为excel的路径
        
        //打开 book.xls 文件
        $conn->open($connstr);
        $sql="select * from [Sheet1$]";//Excel 表下面的选项卡
        $rs=$conn->execute($sql);
        /* 导入字段文件 */
       $field_arr=array('id','name','pwd','pid','email');//数据库表中的字段名称
        $field_str=implode(',',$field_arr);
        /* 循环导入到MySQL数据库中 */
                
        while(!$rs->eof){
            $value='';
            foreach($field_arr as $v){
                $value .= "'".iconv('gb2312','utf-8',$rs->fields($v)->value)."',";
            }
            $sqls = "insert into ".$this->tbname."(".$field_str.") values(".trim($value,',').")";           
            $this->query($sqls);        //把数据逐条插入数据库                    
            $rs->movenext;//用在指针下移
        }
        echo "<script>alert('数据已成功导入到MySQL!');history.back();</script>";
        
    }//end func impExcel()
    
    /*
     * 文件上传功能,通过从表单接收的文件信息,从而把文件Copy并保存到服务器的缓存文件中。
     * 注:
     *         该方法现在只能允许单个文件的上传
     */
    function upload(){
        if ($_FILES["file"]["error"] > 0){
            echo "Error: " . $_FILES["file"]["error"] . "<br />";
        }else{
            return array(
                "name"=>$_FILES["file"]["name"],
                "type"=>$_FILES["file"]["type"],
                "size"=>$_FILES['file']['size'],
                "tmp_name"=>$_FILES['file']['tmp_name']
            );
        }//end if
        
    }//end func upload
    
    /*
     * 连接数据库
     */
    function conn(){
        $this->server_name = "localhost";
        $this->user = "root";
        $this->password = "000111";
        $this->database = "yxlego";    
        $this->conn = mysql_connect($this->server_name, $this->user, $this->password ) or die("数据库连接出错!");
        mysql_select_db($this->database);            //选择数据库
    }//end func conn()
    
    //执行函数
    function query($sql){
        $result = mysql_db_query($this->database, $sql, $this->conn);
        return $result ;
    }//end func query();
}//end class

?>