Correction status:qualified
Teacher's comments:
预处理的好处
1.防止SQL注入
2.一条语句多次使用
预处理步骤
准备工作:连接数据库,准备SQL语句
创建预处理对象
检测SQL语句
参数绑定
执行操作
销毁对象
关闭数据库连接
预处理的增删改查示例
其实呢,预处理的增删改查基本操作都一样
下面呢 我把他们一样的拿出来,
基本样式
1连接数据库,准备SQL语句 sql语句中的值必须为问号,且顺序不能乱
require 'connect.php'; $sql = "INSERT IGNORE aaa SET name=?,age=?,money=?;"; // 给变量赋值 $name= '西施妹妹'; $age=16; $money=5600;
创建预处理对象/检测SQL语句---这两句是公共样式
//创建stmt预处理对象 $stmt = mysqli_stmt_init($db); //检测SQL语句 //mysqli_stmt_prepare() if(mysqli_stmt_prepare($stmt,$sql)){
参数绑定--参数就是根据你要与处理得参数来定,注意一下他们的类型
//讲变量与SQL语句的占位符进行绑定 // mysqli_stmt_bind_param() mysqli_stmt_bind_param($stmt,"sii",$name,$age,$money);
执行操作 ----增删改的执行是一样的,查的不一样,继续往下看 ,下边上实例
// 执行SQL语句 // mysqli_stmt_execute() mysqli_stmt_execute($stmt); //更新条数 echo '新增了'.mysqli_stmt_affected_rows($stmt).'条,ID是:'.mysqli_stmt_insert_id($stmt);
销毁对象/关闭数据库连接---公共样式
} //关闭 mysqli_stmt_close($stmt); mysqli_close($db);
光这样看也看不出个啥 下面把增删改查的实例放上来瞅瞅
<?php /** * User: Z先生 * Date: 2018/4/25 * 数据查询 */ require 'connect.php'; $sql = "SELECT name,age FROM aaa WHERE id=?;"; // 给变量赋值 $id = 34; //创建stmt预处理对象 $stmt = mysqli_stmt_init($db); //检测SQL语句 //mysqli_stmt_prepare() if(mysqli_stmt_prepare($stmt,$sql)){ //讲变量与SQL语句的占位符进行绑定 // mysqli_stmt_bind_param() mysqli_stmt_bind_param($stmt,"i",$id); // 执行SQL语句 // mysqli_stmt_execute() mysqli_stmt_execute($stmt); // 绑定结果变量 SQL查了几个字段这里就设置几个字段 mysqli_stmt_bind_result($stmt,$name,$age); // 获取值 mysqli_stmt_fetch($stmt); // 输出 echo $name .'的年龄是'. $age; } //关闭 mysqli_stmt_close($stmt); mysqli_close($db);
点击 "运行实例" 按钮查看在线实例
<?php /** * User: Z先生 * Date: 2018/4/25 * 数据查询 */ require 'connect.php'; $sql = "INSERT IGNORE aaa SET name=?,age=?,money=?;"; // 给变量赋值 $name= '西施妹妹'; $age=16; $money=5600; //创建stmt预处理对象 $stmt = mysqli_stmt_init($db); //检测SQL语句 //mysqli_stmt_prepare() if(mysqli_stmt_prepare($stmt,$sql)){ //讲变量与SQL语句的占位符进行绑定 // mysqli_stmt_bind_param() mysqli_stmt_bind_param($stmt,"sii",$name,$age,$money); // 执行SQL语句 // mysqli_stmt_execute() mysqli_stmt_execute($stmt); //更新条数 echo '新增了'.mysqli_stmt_affected_rows($stmt).'条,ID是:'.mysqli_stmt_insert_id($stmt); } //关闭 mysqli_stmt_close($stmt); mysqli_close($db);
点击 "运行实例" 按钮查看在线实例
<?php /** * User: Z先生 * Date: 2018/4/25 * 数据查询 */ require 'connect.php'; $sql = "DELETE FROM aaa WHERE id=?;"; // 给变量赋值 $id = 34; //创建stmt预处理对象 $stmt = mysqli_stmt_init($db); //检测SQL语句 //mysqli_stmt_prepare() if(mysqli_stmt_prepare($stmt,$sql)){ //讲变量与SQL语句的占位符进行绑定 // mysqli_stmt_bind_param() mysqli_stmt_bind_param($stmt,"i",$id); // 执行SQL语句 // mysqli_stmt_execute() mysqli_stmt_execute($stmt); //更新条数 echo '删除了'.mysqli_stmt_affected_rows($stmt).'条'; } //关闭 mysqli_stmt_close($stmt); mysqli_close($db);
点击 "运行实例" 按钮查看在线实例
<?php /** * User: Z先生 * Date: 2018/4/25 * 数据查询 */ require 'connect.php'; $sql = "UPDATE aaa SET name=? WHERE id=?;"; // 给变量赋值 $name = "刘大姐"; $id = 34; //创建stmt预处理对象 $stmt = mysqli_stmt_init($db); //检测SQL语句 //mysqli_stmt_prepare() if(mysqli_stmt_prepare($stmt,$sql)){ //讲变量与SQL语句的占位符进行绑定 // mysqli_stmt_bind_param() mysqli_stmt_bind_param($stmt,"si",$name,$id); // 执行SQL语句 // mysqli_stmt_execute() mysqli_stmt_execute($stmt); //更新条数 echo '更新了'.mysqli_stmt_affected_rows($stmt).'条'; } //关闭 mysqli_stmt_close($stmt); mysqli_close($db);
点击 "运行实例" 按钮查看在线实例