mysqli预处理语句的技术

点赞:5421 浏览:20344 近期更新时间:2024-02-11 作者:网友分享原创网站原创

摘 要

PHP5中的mysqli预处理语句可以有效的提高参数化SQL查询语句重复执行的效率,而且速度快,稳定性好,安全性高.本文详细分析了mysqli扩展中预处理语句的优点,并结合实例,详细阐述了mysqli预处理语句操作MySQL数据库的实现方法.

【关 键 词】面向对象mysqli预处理语句SQL注入

mysqli是PHP5的扩展模块,它被封装为一个类,是一种面向对象的技术.mysqli扩展不仅支持mysql扩展的所有功能,而且增加了一些新特性.mysqli扩展模块包括三个类,分别是mysqli、mysqli_result和mysqli_stmt.其中mysqli_stmt是实现mysqli预处理语句的核心类.mysqli预处理语句的优势明显,例如执行效率高,安全性能好等.

1预处理语句的简述

mysqli预处理语句就是将结构相同的SQL语句向MySQL怎么写作器发送一次,怎么写作器对该命令只分析一次,之后,可以用不同的参数,多次执行.这种方法不仅减少了传输的数据量,而且还提高了SQL语句的处理效率.

2mysqli预处理语句的实施步骤

mysqli预处理语句的技术参考属性评定
有关论文范文主题研究: 关于语句的论文范本 大学生适用: 专升本论文、学术论文
相关参考文献下载数量: 86 写作解决问题: 怎么写
毕业论文开题报告: 论文提纲、论文选题 职称论文适用: 核心期刊、职称评副高
所属大学生专业类别: 怎么写 论文题目推荐度: 免费选题

2.1创建预处理语句对象

使用mysqli_stmt类的prepare()方法,在创建mysqli_stmt类的对象的同时,准备好要执行的预处理语句.预处理语句中每个参数都是用占位符“?”替换的,并存储在MySQL怎么写作器上等待执行.

2.2绑定参数

准备好预处理语句之后,使用bind_param()方法把预处理语句中用占位符“?”替换的参数与PHP变量绑定.bind_param()方法的第一个参数是由特定字符组成的字符串,并表示预处理语句中参数变量的数据类型和个数,而且每个字符必须与参数列表中每个变量一一匹配.可以表示数据类型的字符有i、d、b、s等.i代表INTEGER;d代表DOUBLE/FLOAT;b代表BLOB二进制数据;s代表其它类型.

2.3给变量赋值

预处理语句中的参数与变量绑定之后,为每个变量赋值,形成一个可执行的SQL语句,执行之后,可以给变量赋新值再次执行.完成同样的操作,却不需要重复向怎么写作器发送同样的SQL语句.

2.4执行SQL语句

准备好了预处理语句,并为绑定的所有参数赋值之后,可以调用execute()方法执行SQL语句了,并给参数赋不同的值,执行多次.

2.5回收资源

预处理语句运行结束之后,使用mysqli_stmt对象的close()方法释放资源,删除预处理语句.

3mysqli预处理语句处理INSERT操作

$link等于newmysqli("localhost","root","123","db_php");

if(!$link->connect_errno){

$query等于"INSERTINTOtb_userVALUES";

$stmt等于$link->prepare($query);

$stmt->bind_param

$username等于"周文韬";

$password等于md5("000");

$等于"zhoujie@126.";

$sex等于"男";

$stmt->execute();

$stmt->close();

}

在本例中可以给每个变量赋新值后重复执行,可以向tb_user表中插入多条记录.用这个方法完成INSERT、UPDATE、DELETE操作之后,可以使用mysqli_stmt对象的affected_rows属性获取被操作记录的行数;还可以使用mysqli对象的insert_id属性获得tb_user表中最新一条新增记录的userid的值(字段userid是tb_user表的主键),因为该字段被定义为int类型,并且是auto_increment属性.


在预处理语句的SELECT操作中,SELECT查询结果将保留在MySQL怎么写作器上,可以用fetch()方法把记录逐条取回到PHP程序中,赋值给使用bind_result()方法绑定的PHP变量.如果需要对查询的所有记录进行处理,可以调用mysqli_stmt对象中的store_result()方法,把所有结果全部取回到PHP程序中.这样做不仅更有效率,而且能减轻怎么写作器的负担.

mysqli预处理语句比mysql有更高的执行效率和安全性,因为,mysql是将完整的SQL语句传递给怎么写作器,然后逐条编译执行;而mysqli是将用占位符“?”代替参数的SQL语句事先缓存在MySQL怎么写作器上,而后,只向怎么写作器传递SQL语句的参数,绑定不同的参数后即可反复运行.此外,mysql执行SQL语句时是把传人的变量当成SQL语句的一部分,而mysqli预处理语句在传递绑定参数的时候,无论参数的值是什么,即使参数本身就是SQL语句,也只是当做字符串来处理,这样就防止了数据库SQL注入的危险.

4总结

mysqli预处理语句提高了大数据的处理效率,查询语句仅需要解析一次,但可以用相同或不同的参数执行多次,这样就避免重复分析――编译――优化的周期,提高了效率,而且mysqli预处理语句的处理方式本身更加科学,提高了安全性.

作者简介

周建儒(1980-),男,陕西省城固县人.硕士学位.现为四川信息职业技术学院信息工程系讲师.研究方向为软件工程.

作者单位

四川信息职业技术学院信息工程系四川省广元市628040