zoukankan      html  css  js  c++  java
  • PHPexcel 导入import 数据到 mysql: mysql 查询数据是否存在, 如果存在返回id, 不存在, 插入返回id. 2) mysql_query , mysql_connect, mysql_select_db, mysql_error, mysql_num_rows,mysql_close

    一: 要求:

    上面的图表 中的数据插入到 3张表中.

    1)t_vide_warehourse 分类表:

    此表中包含 一级分类 和二级分类.  二级分类是一级分类的子级.

    2)t_video_info   包名表

     此表 管理  第一张表.   并且 只有 第二次分类 才可以有 包 名 .

    一个二级分类下 可以  有多个包.

    3)t_video_file  文件表.

     

     此表 关联 第二张表;   一个  包 下  可以 有多个文件.

    -----------------------------------------------------------------------------------------------

    情况1:

    上面:   第二级分类 就是 [教育培训], 包名 是  [计算机培训],  文件名是 [Android开发初级课程SQLite数据库介绍]

    情况2:

     上面:  二级分类 名 是 [其他],  包名是 [Photoshop CS6一对一教程],  文件名是 [01-01 Photoshopcs6安装方法]

    情况3:

    这种分类是空白的 数据 ,就排除掉. 不插入到数据库.

    二: 导入到数据库的主题文件.

    因为一个excel文件包含了 17个sheet ,太大了. 所以我们一个一个sheet的导入.

    ----------------

    目录结构:

     ----------------------------------

     1. file01.php

      1 <?php
      2     // ini_set ('memory_limit', '-1');
      3     /***************读取excel文件**************/
      4     require_once 'PHPExcel_1.8.0/Classes/PHPExcel/IOFactory.php';
      5 
      6     // echo "停止运行!";
      7     // die;
      8 
      9 
     10     $execlName = '01.xlsx';
     11     $firstCateName = "计算机";
     12 
     13     // $execlName = '02.xlsx';
     14     // $firstCateName = "金融、会计";
     15 
     16     // $execlName = '03.xlsx';
     17     // $firstCateName = "就业创业";
     18 
     19     // $execlName = '04.xlsx';
     20     // $firstCateName = "学前教育";
     21 
     22     // $execlName = '05.xlsx';
     23     // $firstCateName = "烹饪";
     24 
     25     // $execlName = '06.xlsx';
     26     // $firstCateName = "电子商务";
     27 
     28     // $execlName = '07.xlsx';
     29     // $firstCateName = "党政“两学一做”";
     30 
     31     // $execlName = '08.xlsx';
     32     // $firstCateName = "美术";
     33 
     34     // $execlName = '09.xlsx';
     35     // $firstCateName = "体育锻炼";
     36 
     37     // $execlName = '10.xlsx';
     38     // $firstCateName = "英语学习";
     39 
     40     // $execlName = '11.xlsx';
     41     // $firstCateName = "物联网";
     42 
     43     // $execlName = '12.xlsx';
     44     // $firstCateName = "个人提升";
     45 
     46     // $execlName = '13.xlsx';
     47     // $firstCateName = "国学";
     48 
     49     // $execlName = '14.xlsx';
     50     // $firstCateName = "影视";
     51 
     52     // $execlName = '15.xlsx';
     53     // $firstCateName = "音乐";
     54 
     55     // $execlName = '16.xlsx';
     56     // $firstCateName = "艺术修养";
     57 
     58     // $execlName = '17.xlsx';
     59     // $firstCateName = "养生";
     60 
     61 
     62 
     63 
     64 
     65     $reader = PHPExcel_IOFactory::createReader('Excel2007'); //设置以Excel5格式(Excel97-2003工作簿)
     66     $objPHPExcel = $reader->load($execlName); // 载入excel文件
     67     $objWorksheet = $objPHPExcel->getSheet(0); // 读取第一個工作表
     68     $highestRow = $objWorksheet->getHighestRow(); // 取得总行数
     69     // $highestColumm = $objWorksheet->getHighestColumn(); // 取得总列数
     70 
     71     $highestColumm = 'K'; // 取得总列数
     72 
     73 
     74     // echo '总行数'.$highestRow."总列数:".$highestColumm;
     75 
     76     /************ 循环读取每个单元格的数据 *********************/
     77 
     78 
     79     //行数是以第2行开始: A2,B2,C2....----> A10,B10,C10...----->
     80     for ($row = 2; $row <= $highestRow; $row++)
     81     {
     82         for ($column = 'A'; $column <= $highestColumm; $column++)
     83         {//列数是以A列开始
     84 
     85 
     86             //取得一个单元格的值
     87             $cell = $objWorksheet->getCell($column.$row)->getValue();
     88             //富文本对象 转为 字符串
     89             if($cell instanceof PHPExcel_RichText)
     90             {
     91                 $cell = $cell->__toString();
     92             }
     93 
     94 
     95             //$oneData 是一条记录
     96             $oneData[] = $cell;
     97 
     98         }
     99 
    100         //$data 是多条记录
    101         $data[] = $oneData;
    102         //清空原来的一条记录
    103         unset($oneData);
    104     }
    105 
    106     //上面取出$data是初始数据,还需要进行处理
    107     //
    108 
    109 
    110     // 去除 没有 分类的数据
    111     foreach ($data as $key => $value)
    112     {
    113         if(empty($value[2]))
    114         {
    115             unset($data[$key]);
    116         }
    117     }
    118 
    119     // echo "<pre>";
    120     // print_r($data);
    121 
    122 
    123 
    124 
    125     //1: 添加一级分类, 二级分类, 包名:
    126     foreach ($data as $k => $v)
    127     {
    128         //一级分类:
    129         $v[0] = $firstCateName;
    130 
    131         $arr = explode('->', $v[2]);
    132 
    133         if (count($arr) == 1)
    134         {
    135             //二级分类:
    136             $v[1] = '其他';
    137 
    138             //包名:
    139         }
    140         else
    141         {
    142             //二级分类:
    143             $v[1] = $arr[1];
    144 
    145             //包名:
    146             $v[2] = $arr[2];
    147         }
    148 
    149 
    150 
    151         $data1[] = $v;
    152     }
    153 
    154     // echo "<pre>";
    155     // print_r($data);
    156     // print_r($data1);
    157 
    158 
    159     //2: 获取 一级分类id; 二级分类id, 包id; 如果没有, 就插入返回的id
    160     include_once 'test.php';
    161 
    162     foreach ($data1 as $k => $v)
    163     {
    164         //1: 插入一级分类:
    165         $firstCateName = $v[0];
    166         $firstCateId = insertFrist($firstCateName);
    167 
    168         //2: 插入二级分类:
    169         $secondCateName = $v[1];
    170         $secondCateId = insertSecond($secondCateName, $firstCateId);
    171 
    172         //3: 插入info表: 包名:
    173         $baoName = $v[2];
    174         $path = '/Course/CourseImage/'.$v[5];
    175         $infoId = insertInfo($baoName, $path, $secondCateId);
    176 
    177         //4: 插入文件:
    178         $fileName = $v[3];
    179         $imagePath = '/Course/CourseImage/'.$v[5];
    180         $keywords = $v[6];
    181         $fileType = substr($v[4],strrpos($v[4],'.')+1);
    182         $filePath = '/files/video/'.$v[4];
    183         insertFile($infoId, $fileName, $imagePath, $keywords, $fileType, $filePath);
    184 
    185     }
    186 
    187 
    188     echo $firstCateName. '导入完毕!';
    189 
    190 
    191 
    192 
    193 
    194 
    195 
    196 
    197 
    198 
    199 
    200 
    201 
    202     /*******************函数**********************/
    203 
    204 
    205 
    206 
    207 
    208  ?>

    注意:

    因为格式是 .xlsx  所以 这里是 Excel2007 , 不是 Excel5

     2. test.php

    插入数据库函数.

      1 <?php
      2 
      3 
      4 
      5 
      6 
      7     // var_dump(insertFrist('英语1'));
      8 
      9     // var_dump(insertSecond('英语1-1', 153309));
     10     // var_dump(insertSecond('英语1-2', 153309));
     11     // var_dump(insertSecond('测试', 153309));
     12 
     13     // var_dump(insertFrist('英语2'));
     14     // var_dump(insertSecond('测试', 153313));
     15 
     16     // var_dump(insertInfo('包3', '/coure/test/01.png',153314));
     17     // var_dump(insertInfo('包3', '/coure/test/01.png',153315));
     18     //
     19     // var_dump(insertFile(111, '测试文件2', '/course/test/01.jpg', 'haha, gest,test', 'flv', '/course/video/01.flv'));
     20 
     21     /*******************函数**********************/
     22 
     23 
     24     function insertFrist($firstCateName)
     25     {
     26 
     27         $firstCateName = trim($firstCateName);
     28 
     29         $dbhost = '127.0.0.1';  // mysql服务器主机地址
     30         $dbuser = 'root';            // mysql用户名
     31         $dbpass = '';          // mysql用户名密码
     32         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
     33         if(! $conn )
     34         {
     35             die('Could not connect: ' . mysql_error());
     36         }
     37 
     38         mysql_select_db('testvideo', $conn);
     39         // 设置编码,防止中文乱码
     40         mysql_query("set names utf8", $conn);
     41 
     42         $sql = "SELECT * FROM t_vide_warehourse WHERE RW_NAME = '" .$firstCateName. "' AND RW_PARENT_ID = 0 ";
     43         $result = mysql_query( $sql, $conn );
     44         if(! $result )
     45         {
     46           die('Could not get data: ' . mysql_error());
     47         }
     48         else
     49         {
     50             $num = mysql_num_rows($result);
     51 
     52             if ($num == 0)
     53             {
     54                 $sql = "INSERT INTO t_vide_warehourse (RW_NAME, RW_PARENT_ID) VALUES ('" .$firstCateName. "', 0)";
     55                 if (mysql_query($sql, $conn)) {
     56                     return  mysql_insert_id();
     57                 }else{
     58                     echo "插入一级出错". mysql_error();
     59                 }
     60             }
     61             else
     62             {
     63                 while ($row = mysql_fetch_array($result) )
     64                 {
     65                     return $row["VIDEO_RW_ID"];
     66                 }
     67             }
     68 
     69         }
     70 
     71 
     72         //查询
     73         mysql_close($conn);
     74     }
     75 
     76 
     77     function insertSecond($secondCateName, $firstCateId)
     78     {
     79 
     80         $secondCateName = trim($secondCateName);
     81 
     82         $dbhost = '127.0.0.1';  // mysql服务器主机地址
     83         $dbuser = 'root';            // mysql用户名
     84         $dbpass = '';          // mysql用户名密码
     85         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
     86         if(! $conn )
     87         {
     88             die('Could not connect: ' . mysql_error());
     89         }
     90 
     91         mysql_select_db('testvideo', $conn);
     92         // 设置编码,防止中文乱码
     93         mysql_query("set names utf8", $conn);
     94 
     95         $sql = "SELECT * FROM t_vide_warehourse WHERE RW_NAME = '" .$secondCateName. "' AND RW_PARENT_ID = $firstCateId ";
     96         $result = mysql_query( $sql, $conn );
     97         if(! $result )
     98         {
     99           die('Could not get data: ' . mysql_error());
    100         }
    101         else
    102         {
    103             $num = mysql_num_rows($result);
    104 
    105             if ($num == 0)
    106             {
    107                 $sql = "INSERT INTO t_vide_warehourse (RW_NAME, RW_PARENT_ID) VALUES ('" .$secondCateName. "', $firstCateId)";
    108                 if (mysql_query($sql, $conn)) {
    109                     return  mysql_insert_id();
    110                 }else{
    111                     echo "插入二级级出错". mysql_error();
    112                 }
    113             }
    114             else
    115             {
    116                 while ($row = mysql_fetch_array($result) )
    117                 {
    118                     return $row["VIDEO_RW_ID"];
    119                 }
    120             }
    121 
    122         }
    123 
    124 
    125         //查询
    126         mysql_close($conn);
    127     }
    128 
    129     function insertInfo($baoName, $path, $secondCateId)
    130     {
    131 
    132         $baoName = trim($baoName);
    133         $path = trim($path);
    134 
    135         $dbhost = '127.0.0.1';  // mysql服务器主机地址
    136         $dbuser = 'root';            // mysql用户名
    137         $dbpass = '';          // mysql用户名密码
    138         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
    139         if(! $conn )
    140         {
    141             die('Could not connect: ' . mysql_error());
    142         }
    143 
    144         mysql_select_db('testvideo', $conn);
    145         // 设置编码,防止中文乱码
    146         mysql_query("set names utf8", $conn);
    147 
    148         $sql = "SELECT * FROM t_video_info WHERE VIDEO_TITLE = '" .$baoName. "' AND RW_ID = $secondCateId ";
    149         $result = mysql_query( $sql, $conn );
    150         if(! $result )
    151         {
    152           die('Could not get data: ' . mysql_error());
    153         }
    154         else
    155         {
    156             $num = mysql_num_rows($result);
    157 
    158             if ($num == 0)
    159             {
    160                 $sql = "INSERT INTO t_video_info (VIDEO_TITLE,PATH, RW_ID) VALUES ('" .$baoName. "', '" .$path. "', $secondCateId)";
    161                 if (mysql_query($sql, $conn)) {
    162                     return  mysql_insert_id();
    163                 }else{
    164                     echo "插入info出错". mysql_error();
    165                 }
    166             }
    167             else
    168             {
    169                 while ($row = mysql_fetch_array($result) )
    170                 {
    171                     return $row["VIDEO_ID"];
    172                 }
    173             }
    174 
    175         }
    176 
    177 
    178         //查询
    179         mysql_close($conn);
    180     }
    181 
    182     function insertFile($infoId, $fileName, $imagePath, $keywords, $fileType, $filePath)
    183     {
    184 
    185         $fileName = trim($fileName);
    186         $imagePath = trim($imagePath);
    187         $keywords = trim($keywords);
    188         $fileType = trim($fileType);
    189         $filePath = trim($filePath);
    190 
    191         $dbhost = '127.0.0.1';  // mysql服务器主机地址
    192         $dbuser = 'root';            // mysql用户名
    193         $dbpass = '';          // mysql用户名密码
    194         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
    195         if(! $conn )
    196         {
    197             die('Could not connect: ' . mysql_error());
    198         }
    199 
    200         mysql_select_db('testvideo', $conn);
    201         // 设置编码,防止中文乱码
    202         mysql_query("set names utf8", $conn);
    203 
    204         $sql = "INSERT INTO t_video_file (VIDEO_ID, FILE_NAME, IMAGEPATH, KEYWORDS,  FILE_TYPE, FILE_PATH) VALUES ($infoId, '" .$fileName. "', '" .$imagePath. "', '" .$keywords. "', '" .$fileType. "', '" .$filePath. "')";
    205 
    206         // echo $sql;
    207 
    208         if (mysql_query($sql, $conn)) {
    209             return  mysql_insert_id();
    210         }else{
    211             echo "插入文件出错". mysql_error();
    212         }
    213 
    214 
    215 
    216 
    217 
    218 
    219         //查询
    220         mysql_close($conn);
    221     }
    222 
    223 
    224 
    225 
    226  ?>

     这里4个函数:

    1) insertFrist  给 第一张表插入 第一级分类, 如果重复,返回已有id ; 不重复, 插入,返回新的id;

    2)insertSecond  给第一张表 插入 二级分类, 如果重复, 返回已有id; 不重复, 插入,返回新的id;

    3)insertInfo 给第二张表插入 数据,   如果重复, 返回已有id; 不重复, 插入,返回新的id;

    4)insertFile 给第三张宝插入数据,  对于文件 ,不考虑文件名是否重复.

  • 相关阅读:
    关于postman与shiro权限验证问题
    springboot对shiro进行mock单元测试
    深入理解spring注解之@ComponentScan注解
    springboot项目启动,但是访问报404错误
    通过jedis连接redis单机成功,使用redis客户端可以连接集群,但使用JedisCluster连接redis集群一直报Could not get a resource from the pool
    重装系统后ORACLE数据库恢复的方法
    ORA-03113: end-of-file on communication channel 解决方法
    ORA-03113:通信通道的文件结尾-完美解决方案
    由于Windows和Linux行尾标识引起脚本无法运行的解决
    在cmd命令行中弹出Windows对话框(使用mshta.exe命令)
  • 原文地址:https://www.cnblogs.com/cbza/p/7194031.html
Copyright © 2011-2022 走看看