作业:
实现影视网站分类页面、详情页面和底部版权的数据,全部从数据库中读取
完成本次作业走过几个坑,最终有所收获。
之前用数组作为页面的数据源时,为了省去页面里的多重判断,我把数组结构设置为如下模样:
实例 'gc' => [ '国产好剧', ['倚天屠龙记', '都挺好', '如果可以这样爱'], ['1.jpg', '2.jpg', '3.jpg'], ['元朝末年,群雄纷起,武林动荡。江湖传闻,得到屠龙刀倚天剑者,可以成为武林至尊,号令天下,莫敢不从。一时间风云四起,引发了武林中对屠龙刀倚天剑的争夺,几段姻缘和孽缘也由此产生。武当派张翠山与天鹰教殷素素… ', ' 苏母的的突然离世打破了这个家庭外表的平静,意想不到的隐患层层显露,对毫无主见却又自私、小气的苏父的安置和后续生活问题,引发了远在国外的大哥与本城的二哥、小妹三家规律生活的不再。一直被苏母压制的苏父翻… ', '一对已婚男女突然徇情自杀,以为可以结束这一切,却不料悲剧才刚刚开始——他们的爱人,耿墨池和白考儿,同时在葬礼上邂逅。面对同样的背叛他们同时选择报复但又同时爱上彼此,注定饱受打击和折磨。然而他们想真心拥… '] ] 运行实例 » 点击 "运行实例" 按钮查看在线实例
结果改为用数据库作为数据源时,发现增加了数据库的操作量和难度,总结一下实现过程中的体会:
【1】数据库的一条数据 对应一个电影的全部相关信息,要实现我的数据结构,需要从查询结果中按列来取出数据;
$temp = $stmt->fetchAll(PDO::FETCH_COLUMN, $i);
一次只能取出一列,取出多列就需要循环多次查询,增加了数据库的操作;
【2】所需的数据在两张表里,需要通过cate_id关联,获得alias,所以在实现过程中使用了多表关联查询:
$sql = 'SELECT m.mov_id,m.mov_name,m***age,m.detail,c.cate_id,c.name,c.alias FROM movies AS m ,category AS c WHERE (m.cate_id = c.cate_id) AND (c.name ="' . $key . '")';
增加了数据库的查询困难程度;
【3】我的数组是个混写的异型结构,需要按键名取出数据,为此在查询操作中使用了自定义函数:
$tda = $stmt->fetchAll(PDO::FETCH_FUNC, "getCate");
【4】在自定义函数"getCate"中组合为我需要的movies数组格式,结果在函数中忘了声明全局变量,差点放弃这种方法。
【5】经过这次练习,熟悉了数据库的创建和增删改查操作,练习了从外部的txt文件和csv文件导入数据库,也认识到一定要按照数据库中的数据结构来设计页面的操作逻辑,否则会增加数据库的操作负担和困难程度。
数据库的操作代码如下:
实例
<?php require __DIR__ . '/connect.php'; //获得系统数据--system数组 $sql = 'SELECT * FROM `system` LIMIT 1'; $stmt = $pdo->prepare($sql); $stmt->execute(); $system = $stmt->fetch(PDO::FETCH_ASSOC); //获得电影数据--movies数组的别名 $sql = 'SELECT name,alias FROM category'; $stmt = $pdo->prepare($sql); $stmt->execute(); $movies = []; function getCate($name, $alias) { global $movies; $movies[$name][0] = $alias; } $tda = $stmt->fetchAll(PDO::FETCH_FUNC, "getCate"); //获得电影数据--movies数组中的二维数组 foreach ($movies as $key => $value) { $sql = 'SELECT m.mov_id,m.mov_name,m***age,m.detail,c.cate_id,c.name,c.alias FROM movies AS m ,category AS c WHERE (m.cate_id = c.cate_id) AND (c.name ="' . $key . '")'; for ($i = 1; $i <= 3; $i++) { $stmt = $pdo->prepare($sql); $stmt->execute(); $temp = $stmt->fetchAll(PDO::FETCH_COLUMN, $i); $movies[$key][$i] = $temp; } } ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例