博主信息
博文 33
粉丝 0
评论 2
访问量 51918
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP MySQLi 增删查改(CURD)实例-面向对象方法
hanyufeng的博客
原创
1205人浏览过

说明:

在“PHP + MySQL 增删查改(CURD)实例——面向过程方法”(http://hanyufeng.php.cn/blog/detail/2134)的基础上,改用面向对象及SQL语句预处理的方法实现。

重点:

mysqli、mysqli_stmt 对象的常用方法及属性。

预处理语句的参数写法。

公共文件修改:

connect.php

<?php
//使用配置文件保存参数
require 'config.php';
//使用mysqli对象
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($mysqli->connect_errno) {
    printf("连接错误: %s". $mysqli->connect_error);
}
$mysqli->set_charset(DB_CHARSET);

列表(查询)页面 list.php

<?php
$pageTitle = '用户信息列表';
include  'inc/header.php';

//连接数据库
require 'inc/connect.php';

//查询用户信息表user
$sql = "SELECT `id`,`name`,`email` FROM user";  //创建查询语句
//注意:不能写 SELECT * ,必须逐个写出
//否则报错提示:Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in……
$mysqli_stmt = $mysqli->prepare($sql);
$rows = [];  //创建查询结果容器,初始为空数组,该数组最终会成为一个二维数组,与数组表对应
if ($mysqli_stmt->execute()) { //select语句执行会返回一个结果集
    $mysqli_stmt->store_result();  //传送一个结果集到stmt对象
    if ($mysqli_stmt->num_rows > 0) {
        //将结果集中的字段与变量进行绑定,当前返回的有三个字段
        $mysqli_stmt->bind_result($id,$name,$email);
        //开始遍历结果集,将获取到的数据与绑定的变量结合
        $i =0;
        while ($mysqli_stmt->fetch()) { //从结果集的第一条记录开始抓取数据到绑定的变量中
            //继续沿用$rows数组保存数据,以便重复使用输出数据到页面的代码
            $rows[$i] = ['id'=>$id,'name'=>$name,'email'=>$email];
            $i++;
        }
        $mysqli_stmt->free_result(); //释放预处理结果集
        $mysqli_stmt->close();  //关闭当前的预处理语句
    } else {
        echo '<p style="color:red">当前表中没有数据~~</p>';
    }
} else {
    echo '<p>查询失败:'.$mysqli_stmt->error.'</p>';
}

//关闭连接
$mysqli->close();

?>

编辑页面 edit.php

<?php include 'inc/header.php';
$id = $_GET['id'];  //获取到要编辑的记录的id

require 'inc/connect.php';  //连接数据库
//准备查询语句
$sql = "SELECT * FROM `user` WHERE `id` = ".$id;
$res = $mysqli->query($sql);  //执行查询
if(isset($res))
{
    if($res->num_rows>0)
    {
        $row = $res->fetch_array();
    }
}

//if ($res && mysqli_num_rows($res) > 0) {
//    //根据主键查询只会返回一条记录,不用循环处理
//  $row = mysqli_fetch_array($res, MYSQLI_ASSOC);
//}


?>

do_edit.php 代码调整,使用预处理sql语句生成mysqli_stmt对象,并绑定参数

<?php
/**
 * 1.检测表单数据有效性
 * 2.更新数据表(使用预处理对象mysqli_stmt)
 * 3.处理错误信息
 */

$pageTitle = '更新处理';  //设置当前页面标题
include 'inc/header.php';  //导入公共文件头部

//1.检测表单数据有效性
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $error = []; //创建一个数组,用来保存出错信息
    //用户名只读,跳过检查
    //检查邮箱信息
    if (empty($_POST['email'])) {
        $error[] = '没有输入邮箱,请检查';
    } else {
        $email = trim($_POST['email']);
    }
    //如果错误信息数组空,数据有效,更新到数据库
    //2.更新数据表
    if (empty($error)) {
        //连接数据库
        require 'inc/connect.php';
        //创建预处理sql语句,参数使用?占位
        $sql = "UPDATE user SET `email`=? WHERE `id`=?";
        $mysqli_stmt = $mysqli->prepare($sql);
        $id = $_GET['id'];
        //参数类型: s字符串,i整数,d浮点小数
        $mysqli_stmt->bind_param('si', $email, $id);
        //更新数据
        if ($mysqli_stmt->execute()){
            echo '<h3 style="color: green">成功更新了'.$mysqli_stmt->affected_rows.'条记录</h3>';
        } else {
            echo '<h3 style="color:red">更新失败:'.$mysqli_stmt->error.'</h3>';
        }
        //关闭预处理语句
        //如果重复使用预处理语句,就不需要close
        $mysqli_stmt->close();
    }  else {
        //打印出错误信息
        foreach ($error as $message) {
            echo '<h3 style="color:red">'.$message.'</h3>';
        }
    }
}

include 'inc/footer.php';  //导入公共头部

delete.php 

<?php
require 'inc/connect.php';

$sql = "DELETE FROM user WHERE id=?";
$mysqli_stmt = $mysqli->prepare($sql);
$id = $_GET['id'];
//参数类型: s字符串,i整数,d浮点小数
$mysqli_stmt->bind_param('i', $id);

if ($mysqli_stmt->execute()){
    echo '<script>alert("成功删除'.$mysqli_stmt->affected_rows.'条记录")</script>';
} else {
    echo '<script>alert("删除失败'.$mysqli_stmt->error.'")</script>';
}
$mysqli_stmt->close();


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学