PHP防止sql注入小技巧之sql预处理原理与实现方法分析


Posted in PHP onDecember 13, 2019

本文实例讲述了PHP防止sql注入小技巧之sql预处理原理与实现方法。分享给大家供大家参考,具体如下:

我们可以把sql预处理看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。

我们来看下它有什么好处:

  • 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
  • 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
  • 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。

这种预处理呢,可以通过两个方式,咱们这次要说的是mysqli。它任何时候都可以确保应用程序可以用相同的数据访问模式,比PDO要更加实用。

预处理呢,它有两种语句,一种是dml语句,另一种是dql语句。咱们先来看第一种:

<?php
header('Content-type:text/html;charset=utf-8');
$mysqli = new mysqli("127.0.0.1","root","root","test");
$mysqli->query('set names utf8');
$insert = $mysqli->prepare("insert admins (title,cookies,sta,lid) values (?,?,?,?)");
$title = "cuijinpeng";
$cookies = "luyaran201314";
$sta = "1";
$lid = 1;
$insert->bind_param("sssi",$title,$cookies,$sta,$lid);
$res = $insert->execute();
if($res){
  echo 1;
}else{
  echo $insert->error;
  echo 0;
}
$insert->close();
$mysqli->close();

第二种呢,代码如下:

<?php
header('Content-type:text/html;charset=utf-8');
$mysqli = new mysqli("127.0.0.1","root","root","test");
$mysqli->query('set names utf8');
$select = $mysqli->prepare("select id,title,cookies,sta,lid from admins where id > ?");
$id = "1";
$select->bind_param("i",$id);
$select->bind_result($id,$title,$cookies,$sta,$lid);
$select->execute();
while ($select->fetch()) {
  echo $id."---".$title."---".$cookies."---".$sta."---".$lid."<br>";
}
$select->close();
$mysqli->close();

接下来,咱们就该看下这两种语句分别支持什么样子的sql了。

第一种呢,它支持insert、update、delete这三种类型的sql,第二种嘞,就是查询语句了。

完事那个bind_param里的那个i,就是咱们传入参数的类型了,具体介绍如下:

  • i - integer(整型)
  • d - double(双精度浮点型)
  • s - string(字符串)
  • b - BLOB(binary large object:二进制大对象)

我们传入的每个参数都需要指定类,这样通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。

好啦,本次记录就到这里了。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 前一天或后一天的日期
Jun 28 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
PHP使用递归生成文章树
Apr 21 PHP
php删除文本文件中重复行的方法
Apr 28 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 #PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 #PHP
laravel通用化的CURD的实现
Dec 13 #PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 #PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 #PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 #PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
Dec 12 #PHP
You might like
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
理解php原理的opcodes(操作码)
2010/10/26 PHP
php 错误处理经验分享
2011/10/11 PHP
PHP eval函数使用介绍
2013/12/08 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
帝国cms常用标签汇总
2015/07/06 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
php无限极分类实现方法分析
2019/07/04 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
理解Javascript闭包
2013/11/01 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
使用python 3实现发送邮件功能
2018/06/15 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
2020/10/18 Python
公司成立感言
2014/01/11 职场文书
小学生元旦感言
2014/02/26 职场文书
2014年三八妇女节活动总结
2014/03/01 职场文书