博客列表 >php之PDO实战

php之PDO实战

ShunPro的博客
ShunPro的博客原创
2019年09月26日 19:33:26729浏览

本实战的收获:

通过本PDO的实战手动创建了数据库及数据表;

在php中利用PDO创建与数据库的连接

将数据库中的表读取成php的数组

利用数组的遍历及条件判断对数据进行页面上的应用

熟悉了php语句的调式方法,利用echo或var_dump()输出帮助调试。

需注意文件的目录的设置

本实战目录结构

01目录结构.png

数据库结构

02wz_system.png03wz_cates.png04wz_movies.png

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页

首页效果

05index.png

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页效果

06list.png

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页效果

07desc.png

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";?>


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议