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 ...
随机推荐
- Nginx源码完全注释(9)nginx.c: ngx_get_options
本文分析 ngxin.c 中的 ngx_get_options 函数,其影响: nginx.c 中的: static ngx_uint_t ngx_show_help; static ngx_uint ...
- IDEA06 代码规范检测插件之Alibaba Java Coding Guidelines
1 官方资料 1.1 官方介绍 https://mp.weixin.qq.com/s/IbibsXlWHlM59kfXJqRvZA#rd 1.2 github地址 https://github.com ...
- DPDK收发包全景分析
前言:DPDK收发包是基础核心模块,从网卡收到包到驱动把包拷贝到系统内存中,再到系统对这块数据包的内存管理,由于在处理过程中实现了零拷贝,数据包从接收到发送始终只有一份,对这个报文的管理在前面的mem ...
- ubuntu下搭建android开发环境之超顺畅模拟器
如果说android系统的卡,像耳边蚊子让人抓狂,那么android模拟器的卡,那就像午睡时的苍蝇.大概就是一样的恶心~~ 那么,这样的问题对于开发者肯定忍无可忍,我也一样,虽然我还没有入门,但我也一 ...
- RabbitMQ EasyNetq 用法
EasyNETQ帮助类 public class MQHelper { /// <summary> /// 发送消息 /// </summary> public static ...
- "分辨率"到底是个什么概念?它和DPI之间是什么关系?
"分辨率"到底是个什么概念?它和DPI之间是什么关系? 分辨率:显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少.由于屏幕上的点.线和面都是由像素组成的, ...
- 23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态
23-tcp协议——TIME_WAIT状态和FIN_WAIT2状态 摘自:https://blog.csdn.net/qq_35733751/article/details/80146161 2018 ...
- javascript总结38: 神奇的this
1 this的特性 this 是在函数中的 this 的指向 是在函数调用的时候决定的 this的指向. 谁调用这个函数,函数中的this就指向谁 function fn (){ console.lo ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(12):XML配置自动扫描包,自动加载*.properties文件
一.XML和注解组合使用 前几篇的测试案例都是在Java类中配置,现在换一种使用方式,在XML中配置,使Spring IoC容器在启动之后自动去扫描配置的包路径,扫描加载指定路径下的propertie ...
- CodeSmith Generator 6.5 自动生成后的源码分析
1,NetTiers代码结构流程分析: 2,CodeSmithNetTiers使用实践总结 参看流程结构图和实体定义文件关系图,可以看出自动代码生成后,若是手工来调,还是很麻烦的.鉴于此,建议:1,若 ...