本文实例讲述了PHP防止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,就是咱们传入参数的类型了,具体介绍如下:
我们传入的每个参数都需要指定类,这样通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。
好啦,本次记录就到这里了。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php程序设计安全教程》、《php安全过滤技巧总结》、《PHP运算与运算符用法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
2021届考研西北工业大学网络空间安全学院的专硕还算比较顺利吧来分享一波经验造...
操作实现函数: 复制代码 代码如下: Function AddWater(n) Set Photo = Server.C...
废话不多说了,直接跟大家分享五种方法,通过代码讲解php获取超链接文本内容的正...
据外媒报道, 微软目前正在测试一项名为语音启动器(voice launcher)的Windows 10...
Android系统源码编译网上流传着很多优秀的文章为什么我要写这个呢主要的原因是记...
在1个注册页面1.asp ,先选择镇,如下代码: form action="reguser2.asp" method="p...
sequence文件存储格式 1.txt 纯文本格式,若干行记录。默认用字符编码存储 2.Seq...
引言 当我们设计一个完整的电路而言我们除了要知道我们要设计的主芯片电路如FPGA...
树莓派已经从主要为黑客和业余爱好者服务,成为了小型生产力工作站的可靠选择。 ...
那些编程高手除了写代码很厉害之外,调试代码找 bug 更是手到擒来。编写代码只是...