mysql424_424-MYSQLI预处理

本文详细介绍了MySQL的预处理技术,包括其作用、步骤和安全性。通过预处理,可以将动态变量与SQL语句分离,解决SQL注入问题。文章提供了INSERT、UPDATE和DELETE操作的预处理示例,展示了如何创建预处理对象、参数绑定、执行查询以及关闭连接的过程。简化版的预处理代码更加简洁高效。
摘要由CSDN通过智能技术生成

预处理

* 1.预处理技术,可以将动态变量,从SQL语句中的分离出来,单独操作

* 2.解决了SQL注入的安全问题

* 3.预处理操作是通过一个叫预处理对象的工具来操作的: STMT

基本步骤:

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

新增写操作--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);

运行实例 »

点击 "运行实例" 按钮查看在线实例简化版处理代码

实例

/医院

* 预处理的简化版本:以新为例

* 一次新增多条进行介绍

*/

//1.连接数据库

require 'mysqli_connect.php';

//2.准备SQL语句

$sql = "INSERT IGNORE staff SET name=?;";

//3.创建stmt对象

$stmt = mysqli_stmt_init($db);

//4.检测SQL语句

if (mysqli_stmt_prepare($stmt, $sql)) {

/* 参数绑定 */

mysqli_stmt_bind_param($stmt, "s", $name);

$name = '武松';

/* 执行SQL语句 */

mysqli_stmt_execute($stmt);

echo '
新增了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);

//再次添加新数据,只需要给新变量并执行一下就可以了

$name = '西门庆';

/* 执行SQL语句 */

mysqli_stmt_execute($stmt);

echo '
新增了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);

$name = '武大郎';

/* 执行SQL语句 */

mysqli_stmt_execute($stmt);

echo '
新增了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);

} else {

exit(mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));

}

/* 注销stmt对象 */

mysqli_stmt_close($stmt);

/* 关闭数据库连接 */

mysqli_close($db);

运行实例 »

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

简化的区别在于 去掉了 判断执行错误的步骤  直接显示成功的记录数量

区别代码如下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));

}简简单单用两行代码 替换了九行代码mysqli_stmt_execute($stmt);

echo '
新增了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);更新操作--UPDATE

实例

//1.连接数据库

require 'mysqli_connect.php';

//2.准备SQL语句

$sql = "UPDATE wd2018 SET user_name=? WHERE SET user_id=?";

//3.创建stmt对象

$stmt = mysqli_stmt_init($db);

//4.检测SQL语句

if (mysqli_stmt_prepare($stmt, $sql)) {

/* 参数绑定 */

mysqli_stmt_bind_param($stmt, "ss", $user_name,$user_id);

$user_name = '1352445';

$user_id = '10';

/* 执行SQL语句 */

mysqli_stmt_execute($stmt);

echo '
 更新了'.mysqli_stmt_affected_rows($stmt).'条记录,主键是:'.mysqli_stmt_insert_id($stmt);

} else {

exit(mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));

}

/* 注销stmt对象 */

mysqli_stmt_close($stmt);

/* 关闭数据库连接 */

mysqli_close($db);

运行实例 »

点击 "运行实例" 按钮查看在线实例删除操作--DELETE

实例

//1.连接数据库

require 'mysqli_connect.php';

//2.准备SQL语句

$sql = "DELETE FROM wd2018  WHERE user_id=?";

//3.创建stmt对象

$stmt = mysqli_stmt_init($db);

//4.检测SQL语句

if (mysqli_stmt_prepare($stmt, $sql)) {

/* 参数绑定 */

mysqli_stmt_bind_param($stmt, "s", $user_id);

$user_id = '10';

/* 执行SQL语句 */

mysqli_stmt_execute($stmt);

echo '
 成功删除了'.mysqli_stmt_affected_rows($stmt).'条记录';

} else {

exit(mysqli_stmt_errno($stmt).':'.mysqli_stmt_error($stmt));

}

/* 注销stmt对象 */

mysqli_stmt_close($stmt);

/* 关闭数据库连接 */

mysqli_close($db);

运行实例 »

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值