Correction status:Uncorrected
Teacher's comments:
1.预处理技术,可以将动态变量,从SQL语句中的分离出来,单独操作
2.解决了SQL注入的安全问题
3.预处理操作是通过一个叫预处理对象的工具来操作的: STMT
<?php // 连接数据库 require 'mysqli_connect.php'; // 准备 sql 语句 $sql = "DELETE FROM staff WHERE salary>?;"; // 创建并初始化预处理对象stmt $stmt = mysqli_stmt_init($db); $salary = 5000; // 用stmt对象检测当前的预处理语句是否正确,成功返回true,错误返回false if (mysqli_stmt_prepare($stmt, $sql)) { // 变量与语句中的占位符进行绑定 mysqli_stmt_bind_param($stmt, 'i', $salary); // 执行sql if (mysqli_stmt_execute($stmt)) { // 判断成,记录数据 if (mysqli_stmt_affected_rows($stmt) > 0) { echo '删除成功'; } else { echo '没有删除任何数据'; } } else { exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt)); } } else { exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt)); } // 注销 stmt 对象 mysqli_stmt_close($stmt); // 关闭连接 mysqli_close($db);
点击 "运行实例" 按钮查看在线实例
<?php // 连接数据库 require 'mysqli_connect.php'; // 准备 sql 语句 $sql = "UPDATE staff SET salary=? WHERE staff_id=?;"; // 创建并初始化预处理对象stmt $stmt = mysqli_stmt_init($db); $salary = 5000; $staff_id = 3; // 用stmt对象检测当前的预处理语句是否正确,成功返回true,错误返回false if (mysqli_stmt_prepare($stmt, $sql)) { // 变量与语句中的占位符进行绑定 mysqli_stmt_bind_param($stmt, 'ii', $salary, $staff_id); // 执行sql if (mysqli_stmt_execute($stmt)) { // 判断成,记录数据 if (mysqli_stmt_affected_rows($stmt) > 0) { echo '更新成功,主键是:'.$staff_id; } else { echo '没有更新任何数据'; } } else { exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt)); } } else { exit(mysqli_stmt_errno($stmt) . ':' . mysqli_stmt_error($stmt)); } // 注销 stmt 对象 mysqli_stmt_close($stmt); // 关闭连接 mysqli_close($db);
点击 "运行实例" 按钮查看在线实例