主题:
MySQLi面向过程:使用预处理技术实现更新与删除操作
实现效果:
删除操作:
提示信息:
更新操作:
执行错误信息:
删除操作代码(delete.php):
<?php /** * MySQLi面向过程:使用预处理技术实现数据库数据删除操作 */ //连接数据库 require 'mysqli_connect.php'; //创建SQL语句及占位符 $sql = "DELETE FROM staff WHERE name=?;"; //创建stmt对象 $stmt = mysqli_stmt_init($db); //判断预处理对象是否正确然后绑定变量 if(mysqli_stmt_prepare($stmt, $sql)){ //绑定对stmt对象中的变量 mysqli_stmt_bind_param($stmt, "s", $name); //给变量赋值 $name = '武大郎'; //执行操作 mysqli_stmt_execute($stmt); //输出执行结果 echo '<br>删除了'. mysqli_stmt_affected_rows($stmt). '条记录'; //给变量赋值 $name = '西门庆'; //执行操作 mysqli_stmt_execute($stmt); //输出执行结果 echo '<br>删除了'. mysqli_stmt_affected_rows($stmt). '条记录'; } else { //如果判断结果错误输出错误信息 exit(mysqli_stmt_errno($stmt). ':'. mysqli_stmt_error($stmt)); } //关闭stmt对象 mysqli_stmt_close($stmt); //关闭连接 mysqli_close($db);
运行实例 »
点击 "运行实例" 按钮查看在线实例
更新操作代码(update.php):
<?php /** * MySQLi面向过程:使用预处理技术实现更新操作 */ //连接数据库 require 'mysqli_connect.php'; //创建SQL语句及占位符 $sql = "UPDATE staff SET name=? WHERE name=?;"; //创建stmt对象 $stmt = mysqli_stmt_init($db); //判断预处理对象是否正确然后绑定变量 if(mysqli_stmt_prepare($stmt, $sql)){ //绑定对stmt对象中的变量 mysqli_stmt_bind_param($stmt, "ss", $name, $nameOld); //给变量赋值 $nameOld = '成昆'; $name = '欧阳锋'; //执行操作 mysqli_stmt_execute($stmt); //输出执行结果 echo '<br>更新了'. mysqli_stmt_affected_rows($stmt). '条记录'; } else { //如果判断结果错误输出错误信息 exit(mysqli_stmt_errno($stmt). ':'. mysqli_stmt_error($stmt)); } //关闭stmt对象 mysqli_stmt_close($stmt); //关闭连接 mysqli_close($db);
运行实例 »
点击 "运行实例" 按钮查看在线实例
总结:
面向过程操作数据库流程比较清晰,工作中需要使用预处理来操作防止SQL注入攻击。
sql(CURD)语句总结:
增:INSERT INTO 表名(表头的值) VALUES(值);
删:DELETE FROM 表名 WHERE 表头='值';
改:UPDATE 表名 SET 新表头='值' WHERE 旧表头='值';
查:SELECT 表头 FROM 表名 WHERE 表头='值';
注意执行写操作(增删改)时必须加上条件以保证安全性,关键字IGNORE可防止重复执行写操作。
预处理函数总结:
创建stmt预处理对象:mysqli_stmt_init();
用stmt语句检测预处理对象:mysqli_stmt_prepare();
占位符绑定变量:mysqli_stmt_bind_param();
受影响的结果行数:mysqli_stmt_affeced_rows();
执行预处理SQL语句:mysqli_stmt_excute();
遍历结果集:mysqli_stmt_fetch(); 结果是一个对象