预处理(防止sql注入的一种方式)
<!--- 预处理(预编译) ---> <?php
/*
防止 sql 注入的两种方式:
1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏。 比如说 增加判断条件,增加输入过滤等,但是智者千虑必有一失。(不推荐)
2. sql 语句的预处理
*/ // 预处理: 就是在程序正式编译之前,事先处理,因为有些功能实现是一样的,只是发生了一些简单的值替换 /*
********** 预处理的原理: ********* insert into register_info values(?,?,?,?); 01. 创建 sql语句模板,并发送到数据库。预留的值使用参数 ? 标记
02. 数据库对模板解析,编译,对sql 语句模板执行查询优化,并存储结果不输出
03. 最多将绑定的参数传给之前 ? 标记的地方,模板执行语句。如果传的参数不一样,模板就可以多次使用。但是对模板的解析只需要做一次 ********** 预处理的优点 *********** 01. 预处理语句大大减少了分析时间,只做了一次增删改查(至于值被多次赋予,已经不需要数据库来操作)
02. 绑定参数减少了服务器带宽,你只需要发送查询或者增加的参数,而不是整个 sql 语句
03. 预处理语句能很好的防止 sql注入,因为参数的发送不会影响一开始对模板的解析,编译,模版又是自己定义的,根本不会有漏洞 */ // 面向对象 // 1. 连接数据库服务器,选择数据库 register
$mysqli = new mysqli('localhost','root','','register'); if ($mysqli){
echo '<h2><i>连接数据库成功</i></h2>'; // 2. 设置字符集
$mysqli->set_charset('utf8'); // 3. 预处理的核心代码(这部分代码数据库只执行一次)
// a. 写sql语句模板 (register_info是已有的表)
$sql = "insert into register_info(id,username,password,email,tel)VALUES (?,?,?,?,?)"; // b. prepare() 方法,预处理阶段
$stmt = $mysqli->prepare($sql); /*------------- 以下代码都是重复执行的,都是由 $stmt 对象操作 --------------*/
// a. 绑定参数 bind_param()
// 给预留的 ? 赋值,要求类型和顺序要和 ? 所表示的一致
/*
格式占位符,格式列表:
i ---> int 整型
s ---> string 字符串
d ---> double 双精度浮点型
b ---> blob(binary large object) 二进制大对象
*/ $id = 2;
$username = '王二';
$password = '1237890';
$email = 'wang@qq.com';
$tel = '12345678987'; $stmt->bind_param('issss',$id,$username,$password,$email,$tel); // b. 开始插入
if ($stmt->execute()){
echo '<h2><i>插入成功</i></h2>';
}else{
echo '<h2><i>插入失败</i></h2>';
} // 4. 关闭预处理
$stmt->close(); // 5. 关闭数据库
$mysqli->close(); }else{
die('连接数据库失败!');
}
预处理(防止sql注入的一种方式)的更多相关文章
- .net防止SQL注入的一种方式
首先也要明白一点,什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将 ...
- Hibernate使用中防止SQL注入的几种方案
Hibernate使用中防止SQL注入的几种方案 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数 ...
- ASP.NET MVC中使用Unity进行依赖注入的三种方式
在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...
- Spring注入值得2种方式:属性注入和构造注入
Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的 ...
- SQL注入攻击的常见方式及测试方法
本文主要针对SQL注入的含义.以及如何进行SQL注入和如何预防SQL注入让小伙伴有个了解.适用的人群主要是测试人员,了解如何进行SQL注入,可以帮助我们测试登录.发布等模块的SQL攻击漏洞,至于如何预 ...
- Spring中属性注入的几种方式以及复杂属性的注入
在Spring框架中,属性的注入我们有多种方式,我们可以通过构造方法注入,可以通过set方法注入,也可以通过p名称空间注入,方式多种多样,对于复杂的数据类型比如对象.数组.List集合.map集合.P ...
- Spring静态注入的三种方式
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen1403876161/article/details/53644024Spring静态注入的三 ...
- 峰Spring4学习(2)依赖注入的几种方式
一.装配一个bean 二.依赖注入的几种方式 com.cy.entity People.java: package com.cy.entity; public class People { pri ...
- .net core 注入的几种方式
一.注册的几种类型: services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();//单利模式,整个应用程序 ...
随机推荐
- Hdu4311 || 4312Meeting point-1/-2 n个点中任意选一个点使得其余点到该点曼哈顿距离之和最小
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- MyEclipse创建Maven工程
先要在MyEclipse中对Maven进行设置:
- 大神的Blog挂了,从Bing快照里复制过来的备份
UWidget封装SWidget到UMG 2015年8月30日0 为了使用UMG中的一些高级或便利特性,需要将制作好的Slate控件封装到UWidget中去. 当前UE4版本4.8.3. 将Slate ...
- [转]oracle分析函数Rank, Dense_rank, row_number
oracle分析函数Rank, Dense_rank, row_number 分析函数2(Rank, Dense_rank, row_number) 目录 ==================== ...
- 关于WORD文档的读取乱码问题
一直以来都是用File类操作txt文档,今天想尝试能不能打开word文档,无奈,尝试了UTF8,Unicode,Default....等编码方式,打开文件都是乱码,电脑甚至发出警报声. 以下只取一种编 ...
- android 5.0以上通知栏、状态栏图标变成白色
在5.0以上的系统上发现,平常的自定义notification出来的icon,居然在状态栏上变成了纯白色的icon. 看源代码会发现: protected void applyColorsAndBac ...
- 关于zepto(相似于jquery、jQuery用于网页浏览器,zepto用于手机浏览器)
http://blog.csdn.net/kongjiea/article/details/42522305 -----关于zepto和jquery的差别 jQuery 使用 .width() 和 ...
- 使用复合设计模式扩展持久化的CURD,Select能力
大家可能会经常遇到接口需要经常增加新的方法和实现,可是我们原则上是不建议平凡的增加修改删除接口方法,熟不知这样使用接口是不是正确的接口用法,比如我见到很多的项目分层都是IDAL,DAL,IBLL,BL ...
- CruiseControl.Net <buildpublisher>部署到远程机器报错的解决办法
CruiseControl.Net ,使用<buildpublisher>将编译后的程序部署到远程机器时,使用以下配置 <buildpublisher> <sourceD ...
- angular 中父元素ng-repeat后子元素ng-click失效
在angular中使用ng-repeat后ng-click失效,今天在这个上面踩坑了.特此记录一下. 因为ng-repeat创造了新的SCOPE.如果要使用这个scope的话就必须使用$parent来 ...