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

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

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

预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。

绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。

预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。

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

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

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();

第二种呢,代码如下:

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."
";

}

$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防止sql注入小技巧之sql预处理原理与实现方法分析相关推荐

  1. sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理

    1. 安装 Microsoft SQL Server Compact 4.0 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id ...

  2. SQL Sever 小技巧之解决外键约束(禁用、启用外键约束)

    SQL Sever 小技巧之解决外键约束(禁用.启用外键约束) 因为有外键约束的存在,在从表中,修改主表不存在的数据是不合法的;在主表中,删除从表中已存在的主表信息也是不合法的. 当然方法总比困难多, ...

  3. SQL注入绕过关键词过滤的小技巧及原理(union select为例)

            本文以联合查询关键字union select为例讲解绕过关键词过滤的一些方法.之所以了解绕过,关键是发现sqlmap有时候真的是不靠谱,只能指定命令跑.有一些简单过滤很容易绕过却不能检 ...

  4. spark sql合并小文件_Spark SQL小文件问题在OPPO的解决方案

    Spark SQL小文件是指文件大小显著小于hdfs block块大小的的文件.过于繁多的小文件会给HDFS带来很严重的性能瓶颈,对任务的稳定和集群的维护会带来极大的挑战. 一般来说,通过Hive调度 ...

  5. sql日期大于某天_(十五)sql/Linux 小技巧

    多表关联 with tt as (),tt2 as (),c as() select tt.d,c.t,count(distinct tt.user_id) as uv from tt left jo ...

  6. SQL防注入大全——史上最全的 SQL 注入资料

    什么是 SQL 注入速查表? SQL注入速查表是可以为你提供关于不同种类 SQL注入漏洞 的详细信息的一个资源.这份速查表对于经验丰富的渗透测试人员,或者刚开始接触 Web应用安全 的初学者,都是一份 ...

  7. SQL性能优化15个小技巧

    SQL性能优化15个小技巧 前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有 ...

  8. php7 mysql防注入_php如何防sql注入?

    SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句.它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器. 攻击者可以使用SQL注入漏洞绕过应用程序安 ...

  9. SpringBoot防SQL注入

    新建XssHttpServletRequestWrapper import java.io.BufferedReader; import java.io.ByteArrayInputStream; i ...

最新文章

  1. ad中电容用什么封装_干货 | 为什么单相电机要用电容,三相电机不需要电容?...
  2. 使用JavaScript选择GridView行的方法汇总
  3. SQL:查询学习笔记
  4. 怎么样用vue ui来创建一个vue项目
  5. linux前10ip,检查网口流量与前10名流量大IP
  6. 【源码类】开源项目汇总
  7. 浅谈MIPS地址对齐问题
  8. 减少Java垃圾收集开销的5条提示
  9. Mybatis源码之插件模块分析
  10. 移动端UI自动化Appium测试——Appium server两种启动方式
  11. php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
  12. IP归属地显示的简单实现代码
  13. 支持ECSHOP 2.73手机客户端
  14. 2018 Unite大会——《使用UPA工具优化项目》演讲实录
  15. macbook usb口突然不能用 解决方法
  16. uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文)
  17. 编程初学者为什么要首选Java?
  18. 计算机文字录入技能竞赛,文字录入技能竞赛方案
  19. 网络验证 api.php,青柠网络验证webapi接口说明
  20. 众多虚幻游戏场景素材一键即可获取

热门文章

  1. HttpComponents分析之连接池实现
  2. struts2中action的class属性值意义
  3. _技巧_Chrome_Vimium插件_纯键盘控制浏览器
  4. 启动Tomcat服务时,出现org.apache.catalina.startup.VersionLoggerListener报错
  5. 1026. 程序运行时间(15)
  6. 配置Apacheserver
  7. .NET/C# 使用Stopwatch测量运行时间
  8. LeetCode OJ - Surrounded Regions
  9. HTTP请求上下文之终结:HttpContext类
  10. MySQL5.5安装到最后一步卡住的解决办法(即使删除了隐藏文件内C:\ProgramData的MySQL以后还是没解决问题)