博主信息
Victor的博客
博文
26
粉丝
0
评论
0
访问量
2812
积分:0
P豆:52

从数据库获取影视网站的数据--2019年09月25日

2019年10月06日 20:12:41阅读数:195博客 / Victor的博客 / PHP

作业:

实现影视网站分类页面、详情页面和底部版权的数据,全部从数据库中读取

完成本次作业走过几个坑,最终有所收获。

之前用数组作为页面的数据源时,为了省去页面里的多重判断,我把数组结构设置为如下模样:

实例
'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;
	}

}
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例














批改状态:合格

老师批语:写出来了, 一定要赶紧总结一下

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
暂无评论暂无评论!