Blogger Information
Blog 44
fans 3
comment 3
visits 33803
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
MySQLi面向过程:使用预处理技术实现更新、删除、查询和增加操作--2018年4月24日
唔良人
Original
676 people have browsed it

预处理
1.预处理技术,可以将动态变量,从SQL语句中的分离出来,单独操作
2.解决了SQL注入的安全问题
3.预处理操作是通过一个叫预处理对象的工具来操作的: STMT

基本步骤:
1.创建stmt预处理对象
2.检测SQL语句
3.参数绑定
4.执行查询
5.注销stmt预处理对象
6.关闭数据库连接


预处理insert操作

<?php
/医院
 * 预处理INSERT操作
 */

//1.连接数据库
require 'mysqli_connect.php';

//2.准备SQL语句,将变量部分使用占位符进行代替
$sql = "INSERT IGNORE staff SET name=?, sex=?, age=?,salary=?;";
$name = '杨康';
$sex = 0;
$age = 28;
$salary = 4800;

//3.创建并初始化预处理对象stmt
$stmt = mysqli_stmt_init($db);

//4.用stmt对象检测预处理语句是否正确,成功返回true,错误返回false
if (mysqli_stmt_prepare($stmt, $sql)) {

    /* 将变量与SQL语句中的占位符进行绑定 */
    mysqli_stmt_bind_param($stmt, "siii", $name, $sex, $age, $salary);

    /* 执行SQL语句 */
    if (mysqli_stmt_execute($stmt)) {
        //判断是否执行成功:受影响的记录数量
        if (mysqli_stmt_affected_rows($stmt) > 0) {
            echo '新增成功,主键是:' . mysqli_stmt_insert_id($stmt);
        } else {
            echo '没有新增任何数据';
        }
    } else { //返回SQL执行阶段的错误
        exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt));
    }
} else { //返回SQL检测阶段的错误
    exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt));
}
/* 注销stmt对象 */
mysqli_stmt_close($stmt);

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

运行实例 »

点击 "运行实例" 按钮查看在线实例

预处理查询delete操作

<?php
/医院
 * 预处理查询delete操作
 */

//1.连接数据库
require 'mysqli_connect.php';

//2.准备SQL语句,将变量部分使用占位符进行代替
$sql = "UPDATE staff SET salary=? WHERE staff_id=?;";

//3.创建并初始化预处理对象stmt
$stmt = mysqli_stmt_init($db);

//4.用stmt对象检测预处理语句是否正确,成功返回true,错误返回false
if (mysqli_stmt_prepare($stmt, $sql)) {
    /* 将变量与SQL语句中的占位符进行绑定 */
    mysqli_stmt_bind_param($stmt, "ii", $salary,$staff_id);
    $staff_id = 12;
    $salary = 5000;
    /* 执行SQL语句 */
    if (mysqli_stmt_execute($stmt)) {
        //判断是否执行成功:受影响的记录数量
        if (mysqli_stmt_affected_rows($stmt) > 0) {
            echo '成功的更新了' . mysqli_stmt_affected_rows($stmt).'条记录';
        } else {
            echo '没有记录被更新';
        }
    } else { //返回SQL执行阶段的错误
        exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt));
    }
} else { //返回SQL检测阶段的错误
    exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt));
}
/* 注销stmt对象 */
mysqli_stmt_close($stmt);

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

运行实例 »

点击 "运行实例" 按钮查看在线实例

预处理查询select操作

<?php
/*
 * 重点知识:预处理结果集操作
 * 预处理查询select操作
 */
//基本步骤
// * 1.连接数据库
require 'mysqli_connect.php';
// * 2.准备SQL语句
$sql = 'SELECT name,salary FROM staff WHERE salary>? LIMIT 5; ';
// * 3.创建stmt对象
$stmt = mysqli_stmt_init($db);
// * 4.检测SQL语句
if (mysqli_stmt_prepare($stmt, $sql)) {
    // * 5.参数绑定
    $salary = 3000;
    mysqli_stmt_bind_param($stmt,'i',$salary);
    // * 6.执行查询
    mysqli_stmt_execute($stmt);
    // * 7.获取结果集
    mysqli_stmt_store_result($stmt);
    // * 8.将结果集中的列与变量进行绑定
    mysqli_stmt_bind_result($stmt,$name,$salary);
    // * 9.检测结果集是否为空
    if (mysqli_stmt_num_rows($stmt) > 0){
        // * 10.遍历结果集
        while (mysqli_stmt_fetch($stmt)) {
            echo "$name,$salary";
        }
    }else {
        exit('没有符合条件的记录');
    }
}else {
    //SQL语句错误
    exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt));
}
// * 11.注销stmt对象
mysqli_stmt_close($stmt);
// * 12.关闭数据库连接
mysqli_close($db);

运行实例 »

点击 "运行实例" 按钮查看在线实例

预处理查询update操作

<?php
/医院
 * 预处理查询update操作
 */

//1.连接数据库
require 'mysqli_connect.php';

//2.准备SQL语句,将变量部分使用占位符进行代替
$sql = "UPDATE staff SET salary=? WHERE staff_id=?;";

//3.创建并初始化预处理对象stmt
$stmt = mysqli_stmt_init($db);

//4.用stmt对象检测预处理语句是否正确,成功返回true,错误返回false
if (mysqli_stmt_prepare($stmt, $sql)) {
    /* 将变量与SQL语句中的占位符进行绑定 */
    mysqli_stmt_bind_param($stmt, "ii", $salary,$staff_id);
    $staff_id = 12;
    $salary = 5000;
    /* 执行SQL语句 */
    if (mysqli_stmt_execute($stmt)) {
        //判断是否执行成功:受影响的记录数量
        if (mysqli_stmt_affected_rows($stmt) > 0) {
            echo '成功的更新了' . mysqli_stmt_affected_rows($stmt).'条记录';
        } else {
            echo '没有记录被更新';
        }
    } else { //返回SQL执行阶段的错误
        exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt));
    }
} else { //返回SQL检测阶段的错误
    exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt));
}
/* 注销stmt对象 */
mysqli_stmt_close($stmt);

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

运行实例 »

点击 "运行实例" 按钮查看在线实例


Correction status:Uncorrected

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