mysqli扩展库---------预处理技术
1, PHP程序与mysql之间处理sql语句流程如下,减少执行时间方式有三种:
① 减少php发送sql次数;
② 减少php与mysql之间网络传输时间;
③ 减少mysql的编译时间;

2, 预编译可以减少数据库执行时间,同时可以防止sql注入攻击。预编译示例如下:
① 向user1中插入3条记录。
<?php
//预编译演示
//需求:请使用预处理的方式,向数据库添加三个用户 //1,创建mysqli对象
$mysqli = new MySQLi("10.252.158.217","root","521lhy","test");
if($mysqli->connect_error){
die("连接错误".$mysqli->connect_error);
}
//2,创建预编译对象
$sql = "insert into user1 (name,password,email,age) VALUES (?,?,?,?)";
$mysqli_stmt = $mysqli->prepare($sql); //绑定参数
$name ="小倩";
$password = "xiaoqian";
$email = "xiaoqian@126.com";
$age = 20;
//参数绑定->给》赋值,这里类型和顺序都要对应
$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);
//int对应i,double对应d,string对应s,boolean对应b
//执行
$b = $mysqli_stmt->execute();
if(!$b){
echo $name."添加出错";
} //继续添加
$name = "老妖";
$password = "laoyao";
$email = "laoyao@126.com";
$age = 120;
$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);
//执行
$b = $mysqli_stmt->execute();
if(!$b){
echo $name."添加出错";
} //继续添加
$name = "宁采臣";
$password = "ningcaichen";
$email = "ningcaichen@126.com";
$age = 24;
$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);
//执行
$b = $mysqli_stmt->execute();
if(!$b){
echo $name."添加出错";
} //释放
$mysqli->close();
② 查询所有id大于5的用户信息以及id大于10的用户信息。
<?php
//预编译演示
//需求:请使用预处理的方式,从数据库查询
//使用预处理的方法,查询所有id>5的用户的id,name,email
$mysqli = new MySQLi("10.252.158.217","root","521lhy","test");
if($mysqli->connect_error){
die("连接错误".$mysqli->connect_error);
} //创建一个预定义的对象?占位
$sql = "select id,name,email from user1 where id > ?";
$mysqli_stmt = $mysqli->prepare($sql); $id = 5; //绑定参数
$mysqli_stmt->bind_param("i",$id); //执行
$mysqli_stmt->execute(); //绑定结果集
$mysqli_stmt->bind_result($id,$name,$email); //取出绑定的值
while($mysqli_stmt->fetch()){
echo "<br/>--$id--$name--$email";
} echo "<br/>**********************************";
$id = 14; //绑定参数
$mysqli_stmt->bind_param("i",$id); //执行
$mysqli_stmt->execute(); //取出绑定的值
while($mysqli_stmt->fetch()){
echo "<br/>--$id--$name--$email";
} //关闭资源
//释放结果
$mysqli_stmt->free_result();
//关闭预编译
$mysqli_stmt->close(); //关闭连接
$mysqli->close();
3, 防止sql注入攻击方式,$sql = “select * from user where username = ‘aaa’ and password =’bbb’”;用此种方式查询时候,如果输入密码是xx’ or 1=’1,即$sql = “select * from user where username = ‘aaa’ and password =’ xx’ or 1=’1’”;这个也会成功的,这就是sql注入。
① 使用预编译。
② 改变验证数据库用户逻辑
$sql = “select password from user where username = ‘aaa’”;
//看看有没有查询到记录,如果有说明用户存在
If(从数据库查询的密码==用户输入的密码){
//合法,用户合法
header(“admin.php”);
}else{
header(“err.php”);
}
mysqli扩展库---------预处理技术的更多相关文章
- php mysqli扩展库之预处理操作
分享下php使用mysqli扩展库进行预处理操作的二个例子,有意研究mysqli用法的朋友,可以参考学习下,一定会有所帮助的. 例1.使用mysqli扩展库的预处理技术 mysqli stmt 向数据 ...
- PHP使用mysqli扩展库实现增删改查(面向对象版)
mysqli扩展库是mysql扩展库的改进版本,在mysql扩展库的基础上提高了稳定性和效率,mysqli扩展库有两套东西,一套就是面向过程的mysqli另一套是面向对象的mysqli.操作方式大体和 ...
- mysqli扩展库操作mysql数据库
配置环境 配置php.ini文件让php支持mysqli扩展库 extension=php_mysqli.dll 建库建表 详见博客 “mysql扩展库操作mysql数据库” 查询数据库 <?p ...
- 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装
现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库 面向过程操作 2.mysqli扩展库 面向对象操作和面向过程操作并存 安全性和效率高于mysql扩展库 ...
- 使用php的mysqli扩展库操作mysql数据库
简单介绍mysqli: 1.mysqli(mysql improve mysql扩展库的增强版) mysql扩展库和mysqli扩展库的区别 1.mysqli的稳定性 安全性 和 执行效率有所提高 ...
- mysqli扩展库应用---程序范例
通过mysqli扩展库对用户表user1进行增删改查操作,用户表user1结构如下: 1,建立数据库操作类库mysqliTool.class.php,代码如下: <?php class mysq ...
- php数据库编程---mysqli扩展库
1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作.Mysqli扩展库比mysql扩展库加强了. 2,mysqli扩展库和mysql扩展库的比较 (1) mysq ...
- PHP mysqli 扩展库(面向对象/数据库操作封装/事务控制/预编译)
1.和mysql扩展库的区别: (1 安全性.稳定性更高 (2 提供了面向对象和面向过程两种风格 2.php.ini 中的 extension=php_mysqli.dll 解除封印 3.面 ...
- mysqli扩展库的 预处理技术 mysqli stmt
问题的提出? 现在需要向mysql数据库添加100个用户,请问如何实现? 思路: 使用for循环100次,向数据库中添加100个用户. 使用批量添加 $sql1=”insert xxx”; $ssql ...
随机推荐
- javascript运算符优先级顺序
1 ()2 !.-(负号).++.-- 3 *./.%4 +.- 10-55 <.<=.<.>=6 ==.!=.===.!==.7 &&8 ||9 ?:10 = ...
- Jenkins一天中构建多次
Build after other projects are built:在其他项目触发的时候触发,里面有分为三种情况,也就是其他项目构建成功.失败.或者不稳定的时候触发项目: Poll SCM:定时 ...
- 文件操作getc
getc函数的作用是从打开的文件中获取一个字符,并加文件指针自动加1,获取的字符在返回值中. 我写了一个读取一个文件255个字节的程序. int main() { FILE *p; fopen_s(& ...
- 面向对象的JavaScript-002
1. <script type="text/javascript"> // Define the Person constructor var Person = fun ...
- IPMI命令
yum -y install ipmitool/etc/init.d/ipmi start ipmitool -I open lan set 1 ipaddr 172.16.8.33ipmitool ...
- python 中面向对象编程简单总结1
1.类的定义方式 class ClassName(object): #object 表示继承的类,默认为object pass 类的使用类似函数的调用,也可以认为是调用了一次模板来创建一个实例. 2. ...
- 路飞项目背景,contentType以及django缓存
昨日回顾: 分页器: 普通分页 # 普通分页 from rest_framework.pagination import PageNumberPagination -每页的大小(默认) -查询的时候, ...
- Redis安装及HA(High Availability)配置(转)
出处:http://www.cnblogs.com/morvenhuang/p/4184262.html Redis是一种内存数据库,以KEY-VALUE(即键值对)的形式存储数据.这篇文章主要介绍的 ...
- Dubbo的配置及启动
Tomcat+Dubbo安装 1.将tomcat的webapps目录下的所有文件清空,讲Dubbo管理控制台的程序dubbo-admin-2.5.3.war放 到webapps中,并且解压命名为ROO ...
- 浅说Java反射机制
工作中遇到,问题解决: JAVA语言中的反射机制: 在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法? 对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的 ...