PHP学习笔记(五)

2023-09-07 326 0

一.PHP MySQL数据库

  • 数据库是按照数据结构来组织,存储和管理数据的仓库。
  • 每个数据库都有一个或者多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。

1.MySQL简介

  • MySQL是最流行的关系型数据库管理系统
  • 使用MySQL来实现php文件和数据库的通信或者链接
  • SQL:Structured Query Language(结构化查询语言)
  • 若干的表单组成数据库
  • 每个表单存储特定类型的数据
  • 表头为记录名称/属性
  • 每列为记录名称所对应的数据域/属性值
  • 可以在php代码中使用SQL结构化查询语句与数据库进行通信
  • 外键:用于关联两个表

2.创建MySQL数据库

1)打开XAMPP Control panel面板,启动Apache,MySQL服务。

2)在浏览器地址栏输入: http://localhost/phpmyadmin/ 回车。显示如下:

3)点击数据库标签,在下方输入数据库名称,点击创建:

创建成功后显示如下:

4)创建数据表

输入表名称,字段数,点击创建:

创建成功后显示如下:

输入对应的字段名称,类型,长度等,点击保存:

保存成功后如下:

5)插入数据

点击插入标签页,输入对应字段的值,点击执行:

执行成功后如下:

也可点击在表中查看:

3.连接MySQL数据库

1)创建账户

点击账户标签页,点击下方新增用户账户:

输入用户名,主机名,密码等信息,点击执行:

执行成功后如下:

2)连接mysql数据库方式mysqli & PDO

  • PDO 应用在 12 种不同数据库中, MySQLi 只针对 MySQL 数据库。如果你的项目需要在多种数据库中切换,建议使用 PDO ,这样你只需要修改连接字符串和部分查询语句即可。 使用 MySQLi, 如果不同数据库,你需要重新编写所有代码,包括查询。
  • 两者都是面向对象, 但 MySQLi 还提供了 API 接口。
  • 两者都支持预处理语句。预处理语句可以防止 SQL 注入,对于 web 项目的安全性是非常重要的。

A. mysqli函数

函数描述
mysqli_connect()打开一个到 MySQL 服务器的新的连接。
mysqli_connect_error()返回上一次连接错误的错误描述。
mysqli_query()执行某个针对数据库的查询。
mysqli_fetch_all()从结果集中取得所有行作为关联数组,或数字数组,或二者兼有。
mysqli_free_result()释放结果内存。
mysqli_close()关闭先前打开的数据库连接。

B. mysqli连接

<?php

    // mysql & PDO

    //连接数据库  mysqli_connect('主机','用户名','密码','数据库名')

    $conn = mysqli_connect('localhost','msonline','admin@123','msonline courses');

    //检测是否连接成功

    if(!$conn) {

        echo '数据库连接失败:' . mysqli_connect_error();

    }

?>

C. mysqli读取数据

<?php 
    // mysql & PDO
    
    //连接数据库 mysqli_connect('主机','用户名','密码','数据库名')
    $conn = mysqli_connect('localhost','msonline','admin@123','msonline courses');

    //检测是否连接成功
    if(!$conn) {
        echo '数据库连接失败:' . mysqli_connect_error();
    }

    //读取数据

    //创建SQL查询语句
    $sql = 'SELECT title, points, id FROM courses ORDER BY created_at';

    //执行语句得到返回结果对象  mysqli_query('连接的数据库', '语句')
    $result = mysqli_query($conn, $sql);

    //获取结果对象并格式化(关联数组) mysqli_fetch_all('结果集','数组类型(MYSQLI_ASSOC|MYSQLI_NUM|MYSQLI_BOTH)')
    $courses = mysqli_fetch_all($result,MYSQLI_ASSOC);

    //释放结果内存
    mysqli_free_result($result);

    //关闭数据库连接
    mysqli_close($conn);

    print_r($courses);
?>

D. 渲染数据

<!DOCTYPE html>
<html lang="en">
    <?php include('templates/header.php'); ?>

    <h4 class="center grey-text">课程列表</h4>
    <div class="container">
        <div class="row">
            <?php foreach($courses as $course) {; ?>
                <div class="col s6 md3">
                    <div class="card z-depth-0">
                        <div class="card-content center">
                            <h6><?php echo htmlspecialchars($course['title']);?></h6>
                            <div><?php echo htmlspecialchars($course['points']);?></div>
                        </div>
                        <div class="card-action right-align">
                            <a href="#" class="brand-text">了解更多</a>
                        </div>
                    </div>
                </div>
            <?php }; ?>
        </div>
    </div>
    
    <?php include('templates/footer.php'); ?>
</html>

E. PHP String函数 - explode

explode() 函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组。

函数描述
explode()把字符串打散为数组。
<?php 
    explode(',','php,mvc,mysql');
?>
<!DOCTYPE html>
<html lang="en">
    <?php include('templates/header.php'); ?>

    <h4 class="center grey-text">课程列表</h4>
    <div class="container">
        <div class="row">
            <?php foreach($courses as $course) {; ?>
                <div class="col s6 md3">
                    <div class="card z-depth-0">
                        <div class="card-content center">
                            <h6><?php echo htmlspecialchars($course['title']);?></h6>
                            <ul class="grey-text">
                                <?php foreach(explode(',',$course['points']) as $point) {?>
                                    <li><?php echo htmlspecialchars($point);?></li>
                                <?php }?>
                            </ul>
                        </div>
                        <div class="card-action right-align">
                            <a href="#" class="brand-text">了解更多</a>
                        </div>
                    </div>
                </div>
            <?php }; ?>
        </div>
    </div>
    
    <?php include('templates/footer.php'); ?>
</html>

F. 流程控制替代语法

<?php 
    //foreach() :
   // endforeach;

   // if():
   // else :
   // endif;
?>
<!DOCTYPE html>
<html lang="en">
    <?php include('templates/header.php'); ?>

    <h4 class="center grey-text">课程列表</h4>
    <div class="container">
        <div class="row">
            <?php foreach($courses as $course):; ?>
                <div class="col s6 md3">
                    <div class="card z-depth-0">
                        <div class="card-content center">
                            <h6><?php echo htmlspecialchars($course['title']);?></h6>
                            <ul class="grey-text">
                                <?php foreach(explode(',',$course['points']) as $point) :?>
                                    <li><?php echo htmlspecialchars($point);?></li>
                                <?php endforeach; ?>
                            </ul>
                        </div>
                        <div class="card-action right-align">
                            <a href="#" class="brand-text">了解更多</a>
                        </div>
                    </div>
                </div>
            <?php endforeach; ?>
            <!--if语句-->
            <?php if(count($courses) >= 2): ?>
                <p>至少有两个课程内容</p>
            <?php else:?>
                <p>少于两个课程</p>
            <?php endif;?>
        </div>
    </div>
    
    <?php include('templates/footer.php'); ?>
</html>

G. 存储数据

新建config/db_connect.php文件,将连接数据库部分提取出来:

<?php 
    // mysql & PDO
    //连接数据库 mysqli_connect('主机','用户名','密码','数据库名')
    $conn = mysqli_connect('localhost','msonline','admin@123','msonline courses');

    //检测是否连接成功
    if(!$conn) {
        echo '数据库连接失败:' . mysqli_connect_error();
    }
?>

连接数据库,存储数据到数据库。

mysqli函数

函数描述
mysqli_real_escape_string()转义在 SQL 语句中使用的字符串中的特殊字符。

语法:mysqli_real_escape_string(connection,escapestring);

<?php

    //连接数据库

    include('config/db_connect.php');

    ... ...

      ... ...

        //所有验证通过

        if(array_filter($errors)) {

            echo '表单中存在错误信息';

        }else {

            //表单验证通过

            //存储数据到数据库

            // 格式化存储数据

            $email = mysqli_real_escape_string($conn, $_POST['email']);

            $title = mysqli_real_escape_string($conn, $_POST['title']);

            $points = mysqli_real_escape_string($conn, $_POST['points']);

            //创建sql语句

            $sql = "INSERT INTO courses(title,email,points) VALUES('$title','$email','$points')";

            //存储数据到数据库并验证

            if(mysqli_query($conn, $sql)) {

                //保存成功

                header('Location:index.php');

                exit;

            }else {

                echo 'query error:' .mysqli_error($conn);

            }

        }

?>

H. 获取单个数据

新建details.php文件。

<?php 
    //连接数据库
    include('config/db_connect.php');
    //验证是否是get请求
    if(isset($_GET['id'])) {
        //初始化id
        $id = mysqli_real_escape_string($conn, $_GET['id']);
        //创建sql语句
        $sql = "SELECT * FROM courses WHERE id = $id";
        //执行语句,获得结果
        $result = mysqli_query($conn, $sql);
        //获取单个结果转换为数组格式
        $course = mysqli_fetch_assoc($result);
        //释放结果内存
        mysqli_free_result($result);
        //关闭数据库连接
        mysqli_close($conn);
    }
?>
<!DOCTYPE html>
<html lang="en">
<?php include('templates/header.php'); ?>
<div class="container center">
    <?php if($course):?>
        <h4>课程标题:<?php echo $course['title']; ?></h4>
        <p>课程作者:<?php echo $course['email']; ?></p>
        <p>创建时间:<?php echo $course['created_at']; ?></p>
        <h5>知识要点</h5>
        <p><?php echo $course['points']; ?></p>
    <?php else:?>
        <h5>抱歉,该课程详情不存在!</h5>
    <?php endif;?>
</div>
<?php include('templates/footer.php'); ?>
</html>

mysqli函数:

函数描述
mysqli_fetch_assoc()从结果集中取得一行作为关联数组。

I. 删除数据

<?php 
    //连接数据库
    include('config/db_connect.php');

    //删除
    if(isset($_POST['delete'])) {
        //初始化id
        $id_to_delete = mysqli_real_escape_string($conn, $_POST['id_to_delete']);
        //创建sql语句
        $sql = "DELETE FROM courses WHERE id = $id_to_delete";
        //执行查询语句
        if(mysqli_query($conn, $sql)) {
            //删除成功
            header('Location: index.php');
        }else {
            //删除失败
            echo 'query error: '. mysqli_error($conn);
        }
    }
    ... ...
    ... ...
?>
<!DOCTYPE html>
<html lang="en">
<?php include('templates/header.php'); ?>
<div class="container center">
    <?php if($course):?>
        <h4>课程标题:<?php echo $course['title']; ?></h4>
        <p>课程作者:<?php echo $course['email']; ?></p>
        <p>创建时间:<?php echo $course['created_at']; ?></p>
        <h5>知识要点</h5>
        <p><?php echo $course['points']; ?></p>
        <!--删除表单-->
        <form action="details.php" method="POST">
            <input type="hidden" name="id_to_delete" value="<?php echo $course['id'];?>">
            <input type="submit" name="delete" value="删除" class="btn brand z-depth-0">
        </form>
    <?php else:?>
        <h5>抱歉,该课程详情不存在!</h5>
    <?php endif;?>
</div>
<?php include('templates/footer.php'); ?>
</html>

相关文章

Laravel框架-环境配置
PHP面向对象
PHP学习笔记(六)
PHP学习笔记(四)
PHP学习笔记(三)
php学习笔记(二)

发布评论