Blogger Information
Blog 17
fans 0
comment 0
visits 12138
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php之PDO实战
ShunPro的博客
Original
732 people have browsed it

本实战的收获:

通过本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";?>


Correction status:qualified

Teacher's comments:将知识点与实际项目结合起来是最好的学习方法
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post