PHP如何将excel文件导入mysql数据库
web PHP 2019-05-05 445 0
关于本站

淘淘IT

记录工作学习中的点点滴滴

本站创建于2017年,用于记录工作和学习中遇到的问题。同时,不断提升网站的使用体验,增加新的功能。

823067 1216 12
最新评论
感谢大佬解决了我的问题
评 留言
11111111111111111111ewqr :ku:
评 留言
@xiaoniba 好像是编码GBK和utf-8的区别,请看下我摘抄的一篇文章,里面有介绍http://taotaoit.com/article/details/885.html,你可以尝试下是否可以
评 tp5.1中字段别名是汉字,提示错误:不支持的数据表达式
\x7f-\xff 这个匹配什么东东,会不会出现安全问题??? 改成这样如何 if ($strict && !preg_match('/^[\w\.\*\x{4e00}-\x{9fa5}]+$/u', $key)) {
评 tp5.1中字段别名是汉字,提示错误:不支持的数据表达式
完美解决 牛逼
评 tp5.1中字段别名是汉字,提示错误:不支持的数据表达式
文章标签更多
ThinkPHP (119)
Mysql (25)
DedeCms (28)
jQuery (27)
证件照 (1)
setInc (3)
setDec (3)
onclick (3)
打开边栏(ESC) 关闭边栏(ESC)

使用Spreadsheet_Excel_Reader类将excel文件导入php数据库,步骤如下:

步骤1:下载类库
从GitHub下载PHP Excel Reader库,下载地址:https://github.com/nuovo/spreadsheet-reader
下载后将其解压缩到根目录并将其重命名为“library”。
步骤2:创建db_config.php文件
为数据库配置创建db_config.php文件,在这个文件中,你必须设置数据库主机、数据库用户名、数据库密码、数据库名称。该文件将用于将数据存储到数据库中。
代码如下:

<?php
header('Content-Type: text/html;charset=utf-8');
$dbHost = "localhost";
$dbUser = "root";
$dbPasswrod = "";
$dbDatabase = "test";
$mysqli = new mysqli($dbHost, $dbUser, $dbPasswrod, $dbDatabase);
mysqli_set_charset($mysqli,"utf8"); // 解决中文乱码
?>
步骤3:创建index.php文件
在根目录中创建index.php文件,在这个文件中,我使用bootstrap创建了一个简单的表单,实现点击按钮后导入选择excel文件的功能。
代码如下:
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <h1>Excel上传</h1>
    <form method="POST" action="excelUpload.php" enctype="multipart/form-data">
        <div class="form-group">
            <label>上传Excel文件</label>
            <input type="file" name="file" class="form-control">
        </div>
        <div class="form-group">
            <button type="submit" name="Submit" class="btn btn-success">上传</button>
        </div>
    </form>
</div>
</body>
</html>
步骤4:创建excelUpload.php文件
创建excelUpload.php文件来管理导入数据库的数据,在这个步骤中,我们必须创建uploads文件夹来存储excel文件到这个文件中,然后读取该文件。
代码如下:
<?php
require('library/php-excel-reader/excel_reader2.php');
require('library/SpreadsheetReader.php');
require('db_config.php');
if (isset($_POST['Submit'])) {
    $mimes = ['application/vnd.ms-excel', 'text/xls', 'text/xlsx', 'application/vnd.oasis.opendocument.spreadsheet','application/octet-stream'];
    // var_dump($_FILES["file"]);
	// echo $_FILES["file"]["type"];
	
	if (in_array($_FILES["file"]["type"], $mimes)) {
        $uploadFilePath = 'uploads/' . basename($_FILES['file']['name']);
        move_uploaded_file($_FILES['file']['tmp_name'], $uploadFilePath);
        $Reader = new SpreadsheetReader($uploadFilePath);
        $totalSheet = count($Reader->sheets());
        echo "你有 " . $totalSheet . " 张表" . $html = "<table border='1'>";
        $html .= "<tr><th>标题</th><th>描述</th></tr>";
        for($i = 0;$i < $totalSheet;$i++) {
            $Reader->ChangeSheet($i);
            foreach ($Reader as $Row) {
                $html .= "<tr>";
                
                $loginName = isset($Row[0]) ? $Row[0] : '';
                $encode = mb_detect_encoding($loginName, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); // 检查从excel导入的数据什么编码
                $loginName = mb_convert_encoding($loginName, 'UTF-8', $encode); // 数据转换为utf-8编码,这样在页面显示就不乱码了,数据库也正常插入了
                $loginSecret = isset($Row[1]) ? $Row[1] : '';
                $html .= "<td>" . $i . "</td>";
                $html .= "<td>" . $loginName . "</td>";
                $html .= "<td>" . $loginSecret . "</td>";
                $html .= "</tr>";
                $query = "insert into users2(loginName,loginSecret) values('" . $loginName . "','" . $loginSecret . "')";
                $mysqli->query($query);
            } 
        } 
        $html .= "</table>";
        echo $html;
        echo "<br />添加到数据库的数据";
    } else {
        die("<br/>sorry,不允许此文件类型上传,只允许Excel文件。");
    } 
} 
?>
备注:


1,excel中有中文,导入不到数据库,显示在页面上也是乱码;已解决,方法如下:
$encode = mb_detect_encoding($loginName, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); // 检查从excel导入的数据什么编码 
$loginName = mb_convert_encoding($loginName, 'UTF-8', $encode); // 数据转换为utf-8编码,这样在页面显示就不乱码了,数据库也正常插入了

扩展:
从phpmyadmin导出数据库,选择CSV格式,中文乱码,导出之前要把编码改为GB2312格式,就不乱码了。


2,导入excel后,输出到页面的表格会多两行空白的空格,这是由excel表中的sheet2和sheet3造成的。

from clipboard

from clipboard

3,excel上传后,mime码是application/octet-stream通用格式,而不是'application/vnd.ms-excel', 'text/xls', 'text/xlsx', 'application/vnd.oasis.opendocument.spreadsheet'中的任何一种格式,不知道为什么

版权声明:本篇文章来源于网络。 来源链接

相关推荐
openssl_private_decrypt解密失败
PHP | 2019-01-16 2037
复制别人的解密程序,原程序可以解密,复制过来就不可以 一步步尝试发现,秘钥换行符有区别, 原秘钥有换行符,复制过来不知道什么时候把换行符清空了,成了一行字符串了。
那三个特殊字符的ascii码239,187,191就是BOM头的 EF BB BF
PHP | 2019-01-24 1667
原问题 字符串长度问题 vardump打印一字符串 string(14) "00107042012" 获取到的字符串长度怎么是14 明明是11个数字啊! 为什么? 回答: 你的字符串有前有三个特殊字符(+BOM) <?php $str = '00107042012'; $str1 = '0010...
评论:0条
评论加载中...
发表评论