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 给第三张宝插入数据,  对于文件 ,不考虑文件名是否重复.

原文地址:https://www.cnblogs.com/cbza/p/7194031.html