本实战的收获:
通过本PDO的实战手动创建了数据库及数据表;
在php中利用PDO创建与数据库的连接
将数据库中的表读取成php的数组
利用数组的遍历及条件判断对数据进行页面上的应用
熟悉了php语句的调式方法,利用echo或var_dump()输出帮助调试。
需注意文件的目录的设置
本实战目录结构
数据库结构
1、连接数据库
拼接数据库信息:数据库类型:host=主机名或IP地址;dbname=数据库名
新建数据库连接:new PDO(数据库信息,username='用户名',password='密码')
<?php //<--连接数据库 $db =[ 'type' => 'mysql', 'host' => 'html.io', 'dbname' => 'phpsql', 'username' => 'root', 'password' => 'root' ]; //数据库信息拼接 $dsn = $db['type']. ':host='.$db['host'].';dbname='.$db['dbname']; //创建pdo对象 try{ $pdo = new PDO($dsn,$db['username'],$db['password']); }catch (PDOException $e){ dir('Connection Failed: '.$e->getMessage()); }; //-->连接数据库完成
2、用PDO预处理语句对象方法读取数据库表的数据
新建sql语句模板
创建PDOStatement预处理语句对象 $pdo->prepare($sql)
绑定sql模板语句中的点位符变量 $stmt->bindParam(`字段名`,变量,PDO::数据类型)
执行sql语句 $stmt->execute()
获取查询到的数据 $stmt ->fetch()或fetchall()前面是一维数组,后面是二维数组
将数据库中需要到表通过pdo的方法引入到php的对应数组变量中
<?php require __DIR__.'/connect.php'; //<--读取网站system数据:title,description,keyword //创建SQL预处理对象 $sql = 'SELECT * FROM `wz_system` WHERE `sys_id` =:sys_id '; $stmt = $pdo -> prepare($sql); $sys_id = 1; //绑定占位变量 $stmt ->bindParam('sys_id',$sys_id,PDO::PARAM_INT); //执行SQL语句,$stmt->execute()对SQL语句进行执行,执行成功返回true,失败返回FALSE if ($stmt->execute()){ //$stmt -> fetch()不管你查询到几条数据,它只返回一行数据到一维数组;$stmt -> fetchall()将查询到的所有数据返回到二维数组 $system = $stmt -> fetch(); // var_dump($system); }else{ die('<pre>'. print_r($stmt->errorInfo(),true)); } //-->读取网站system数据:title,description,keyword //<--读取网站导航分类数据 $sql = 'SELECT * FROM `wz_cates` '; $stmt = $pdo -> prepare($sql); if ($stmt ->execute()){ $cates = $stmt->fetchall(); // var_dump($cates); }else{ die('<pre>'. print_r($stmt->errorInfo(),true)); } //-->网站导航分类数据读取完毕 //-->读取视频信息数据 $sql = 'SELECT * FROM `wz_movies` '; $stmt = $pdo -> prepare($sql); if ($stmt ->execute()){ $movies = $stmt->fetchall(); // var_dump($movies); }else{ die('<pre>'. print_r($stmt->errorInfo(),true)); } ?> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta name="description" content=<?php echo $system['desc'] ;?>> <meta name="keywords" content=<?php echo $system['key'] ;?>> <link rel="stylesheet" href="./static/css/style.css"> <title><?php echo $system['title'] ;?></title> </head> <body> <!-- 头部导航区--> <div class="header"> <ul> <li><a href="index.php">首页</a></li> <?php foreach ($cates as $cate) {?> <li><a href="list.php?<?php echo 'cate_id='.$cate['cate_id']?>"><?php echo $cate['alias']?></a></li> <?php }?> </ul> </div>
3、通过遍历数组的方法生成头部导航和index页
首页效果
index页代码
<?php require __DIR__. "/inc/header.php"; ?> <div class="main"> <?php foreach ($cates as $cate) {?> <h2><a href="list.php?<?php echo 'cate_id='.$cate['cate_id']?>"> <?php echo ' > '.$cate['alias']?></a> </h2> <ul> <?php foreach ($movies as $movie) { if ($cate['cate_id']==$movie['cate_id']){ echo '<li><a href="description.php?mov_id='.$movie['mov_id'].'">'.$movie['name'].'</a></li>'; } }?> </ul> <?php }?> </div> <?php require __DIR__. "/inc/footer.php";?>
4、通过get传值方式进行判断,结合数组遍历生成list页与Description页
list页效果
list页实现代码
<?php require __DIR__. "/inc/header.php"; $cate_id = $_GET['cate_id']; ?> <div class="main"> <?php foreach ($cates as $cate) { if ($cate_id == $cate['cate_id']) { echo '<h2>' . $cate['alias'] . '</h2>'; } } echo '<ul>'; foreach ($movies as $movie) { if ($cate_id==$movie['cate_id']){ echo '<li><a href="description.php?mov_id='.$movie['mov_id'] .'">'.$movie['name'].'</a></li>'; } } echo '</ul>'; ?> </div> <?php require __DIR__. "/inc/footer.php";?>
des页效果
Description页代码
<?php require __DIR__. "/inc/header.php"; $mov_id = $_GET['mov_id']; $img_path = "./static/images/"; ?> <div class="main"> <?php foreach ($movies as $movie) { if ($mov_id == $movie['mov_id']) { echo '<h2>' . $movie['name'] . '</h2>'; echo '<img src="'.$img_path.$movie['image'].'">'; echo '<p>'.$movie['detail'].'</p>'; } } ?> </div> <img src="" alt=""> <?php require __DIR__. "/inc/footer.php";?>