PHP使用MySQL数据库有以下几步:
1、连接数据库
使用PDO连接数据库其实就是创建一个PDO对象。
$pdo=new PDO($dsn(dbtype:host=' ';dbname=' '),$username,$password);
2、创建SQL语句模板
创建一个字符串,字符串中包含需要的SQL语句,例如:
插入数据
$sql = 'INSERT INTO `表名` SET `字段1`= :占位符1, `字段2`=:占位符2, `字段3`=:占位符3, ...;
删除数据
$sql = 'DELETE FROM `表名` WHERE `条件字段`=:条件占位符';
修改数据
$sql = 'UPDATE `表名` SET `字段1`= :占位符1, `字段2`= :占位符2,... WHERE `条件字段`=:条件占位符';
查询数据:
$sql = 'SELECT * FROM `表名` WHERE `条件字段`=:条件占位符';
3、创建SQL语句对象,也称为创建预处理对象
使用prepare()方法创建一个PDOStatement PDO预处理对象,例如:
$stmt = $pdo->prepare($sql);
4、将变量绑定到SQL语句模板的命名占位符上
当SQL语句模板中含有占位符时,需用bindParam()函数将参数绑定到SQL语句模板上。
bindParam(占位符,变量,预定义常量);
常用的预定义常量:
PDO::PARAM_INT: 整数类型
PDO::PARAM_STR: 字符串类型
PDO::FETCH_ASSOC: 获取结果集中的关联部分
例如:
$stmt->bindParam('占位符', $变量, PDO::PARAM_INT);
5、执行SQL操作
使用execute()函数执行SQL操作,例如:
$stmt->execute();
当查询需要获取数据时,可以用fetch()或fetchAll()函数。
fetch获取一行数据,返回一个一维数组,例如:
while ($movie = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<pre>' . print_r($movie, true);
}
fetchAll获取所有数据,返回一个二维数组,例如:
$movies = $stmt->fetchAll(PDO::FETCH_ASSOC);
6. 销毁pdo, 关闭连接
$pdo = null; // unset($pdo) 等价,或者不写,当PHP页面关闭时,PDO对象自动销毁。
以下是本次作业的代码:
connect.php
<?php // 本文件作用为连接数据库 // 数据库PDO对象 // $pdo=new PDO($dsn(dbtype:host='';dbname=''),$username,$password); // 1、创建一个数组保存连接数据库的参数 $db=[ 'type'=>'mysql',//连接数据库的类型 'host'=>'127.0.0.1',//数据库主机地址 'dbname'=>'movie',//数据库名称 'username'=>'root',//登录名 'password'=>'root'//登录密码 ]; // 2、创建pdo对象的参数dsn $dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}"; // 3、创建pdo对象,连接数据库 try{ $pdo= new PDO($dsn,$db['username'],$db['password']); } catch(PDOException $e){ die('Connection Failed: ' . $e->getMessage()); } ?>
点击 "运行实例" 按钮查看在线实例
header.php
<?php // 连接数据库取出数据 // 1、连接数据库 require __DIR__.'/connect.php'; // 2、创建SQL语句模板 $sql="SELECT * FROM movies"; $stmt=$pdo->prepare($sql); $stmt->execute(); $movies=$stmt->fetchall(); // var_dump($movies); $sql="SELECT * FROM cates"; $stmt=$pdo->prepare($sql); $stmt->execute(); $cates=$stmt->fetchall(); // var_dump($cates); $sql="SELECT * FROM systems"; $stmt=$pdo->prepare($sql); $stmt->execute(); $system = $stmt->fetch(PDO::FETCH_ASSOC); // var_dump($system); $sql="SELECT * FROM comments"; $stmt=$pdo->prepare($sql); $stmt->execute(); $comments = $stmt->fetchall(); // var_dump($system); ?> <!-- 网站公共头部 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="static/css/style.css"> <meta name="description" content="<?php echo $system['desc'] ?>"> <meta name="keywords" content="<?php echo $system['key'] ?>"> <title><?php echo $system['title'] ?></title> </head> <body> <!--头部导航--> <div class="header"> <ul class="nav"> <li><a href="index.php">首页</a></li> <!-- 使用foreach遍历数组$cates,将电影的分类ID写入URL中 --> <!-- 先写一个<li>标签里面包含一个<a>标签,<a>标签中的href为各类电影的URL地址 --> <!-- <?php foreach ($cates as $cate) { echo '<li>'; echo '<a href="list.php?cate_id="'; echo $cate['cate_id'] . '>'; echo $cate['alias'] . '</a>'; echo '</li>'; } ?> --> <!-- 以上代码可以写为以下代码: --> <?php foreach ($cates as $cate) : ?> <!-- 这里:相当于 { --> <li><a href="list.php?cate_id=<?php echo $cate['cate_id']; ?>"><?php echo $cate['alias'] ?></a></li> <?php endforeach; ?> <!-- 这里endforeach;相当于 } --> </ul> </div>
点击 "运行实例" 按钮查看在线实例
footer.php
<!--底部版权--> <div class="footer"> <p class="copyright"><?php echo $system['copy']; ?> © 版权所有</p> </div> </body> </html>
点击 "运行实例" 按钮查看在线实例
index.php
<?php require_once __DIR__ . '/inc/header.php'; foreach ($cates as $cate) { echo "<h2>{$cate['alias']}</h2>"; echo '<ol>'; // 遍历影$movies,输出各个电影的名字 foreach ($movies as $movie) { if ($cate['cate_id'] === $movie['cate_id']) { echo "<li><a href='detail.php?mov_id=" . $movie['mov_id'] . "'>{$movie['name']}</a></li>"; } } echo '</ol>'; } require_once __DIR__ . '/inc/footer.php';
点击 "运行实例" 按钮查看在线实例
list.php
<?php // 1、加载公共头部文件 require_once __DIR__ . '/inc/header.php'; // 2、从$_GET中获取cate_id,如果$_GET不写下标,则获取整个$_GET数组,写下标则获取下标对应的值 $cate_id = $_GET['cate_id']; // 3、此时$cate_id是一个字符串,需用intval函数将其转为int型 $cate_id = intval($cate_id); // 4、从$cates数组中取出对应$cate_id值得系列名称,写入标题 foreach ($cates as $cate) { $cate['cate_id'] = intval($cate['cate_id']); if ($cate['cate_id'] === $cate_id) { echo "<h2>{$cate['alias']}</h2>"; echo "<ol>"; // 将$movies中对应$cate['cate_id']的电影名写入列表 foreach ($movies as $movie) { $movie['cate_id'] = intval($movie['cate_id']); if($movie['cate_id']===$cate_id) { echo "<li><a href='detail.php?mov_id={$movie['mov_id']}'>{$movie['name']}</a></li>"; } } echo "</ol>"; } }
点击 "运行实例" 按钮查看在线实例
detail.php
<?php // 加载公共头部 include __DIR__ . '/inc/header.php'; $mov_id = intval($_GET['mov_id']); // 复制list.php模板直接修改 foreach ($movies as $movie) { $movie['mov_id'] = intval($movie['mov_id']); if ($movie['mov_id'] === $mov_id) { echo "<h3>{$movie['name']}</h3>"; echo '<img src="/images/' . $movie['image'] . '" alt="'.$movie['name'].'" width="300">'; echo "<p style='text-indent: 2em'>{$movie['detail']}</p>"; } }; // 添加评论 // 将评论内容写入下方表格 echo '<h4>评论</h4>'; echo '<table>'; echo '<tr><th>用户昵称</th><th>评论内容</th></tr>'; foreach ($comments as $comment) { $comment['mov_id'] = intval($comment['mov_id'] ); if ($comment['mov_id'] === $mov_id) { // 在表格中输入评论人和评论内容 echo "<tr><td>{$comment['user_name']}</td><td>{$comment['content']}</td></tr>"; } } echo '</table>'; // 加载公共底部 include __DIR__ . '/inc/footer.php';
点击 "运行实例" 按钮查看在线实例