博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysqli 扩展库增强-----预处理技术 mysqli stmt
阅读量:6757 次
发布时间:2019-06-26

本文共 2707 字,大约阅读时间需要 9 分钟。

该方案防止sql注入

注意:这里只需建立一次连接,以后都是发数据即可!

案例1:利用简单预处理,往数据库中执行dml语句插入(更新,删除同种方法)信息:preparestatment.php

<?php

//创建mysqli对象

$mysqli=new mysqli("localhost","root","123456","test");

//创建预编译对象

$sql="insert into user (name,password,email,age) values(?,?,?,?)";

$mysqli_stmt=$mysqli->prepare($sql) or die($mysqli->error);

$mysqli->query("set names utf8");

//绑定参数

$name="张三";

$password="zs";

$email="zs@163.com";

$age=26;

//参数绑定->给?赋值,这里类型和顺序要一致!

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

$a=$mysqli_stmt->execute();

if(!$a){

die("操作失败".$mysqli_stmt->execute());

}else {

echo " 操作ok ";

}

//释放

$mysqli->close();

用命令增加的新记录!成功!

如果继续添加,就不需要再执行$mysqli->prepare()了!

现在是只发数据,连接也没断开,这样效率会很高!

<?php

//创建mysqli对象

$mysqli=new mysqli("localhost","root","123456","test");

//创建预编译对象

$sql="insert into user (name,password,email,age) values(?,?,?,?)";

$mysqli_stmt=$mysqli->prepare($sql) or die($mysqli->error);

$mysqli->query("set names utf8");

//绑定参数

$name="张三";

$password="zs";

$email="zs@163.com";

$age=26;

//参数绑定->给?赋值,这里类型和顺序要一致!

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

$a=$mysqli_stmt->execute();//每一个语句后面都要有一个执行语句!

//继续添加

$name="李四";

$password="ls";

$email="ls@sohu.com";

$age="58";

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

$a=$mysqli_stmt->execute();

$name="王五";

$password="ww";

$email="ww@sohu.com";

$age="109";

$mysqli_stmt->bind_param("sssi",$name,$password,$email,$age);

$a=$mysqli_stmt->execute();

if(!$a){

die("操作失败".$mysqli_stmt->execute());

}else {

echo " 操作ok ";

}

//释放

$mysqli->close();

执行时,一次添加3条记录!

案例2:用预处理执行dql语句,查询id>10的用户,如何预防sql注入

<?php

//创建mysqli对象

$mysqli=new mysqli("localhost","root","123456","test");

if(mysqli_connect_error()){

die (mysqli_connect_error());

}

//创建预编译对象

$sql="select id,name,email from user where id>?";

$mysqli_stmt=$mysqli->prepare($sql) or die($mysqli->error);

$mysqli->query("set names utf8");

//绑定参数

$id=10;

//参数绑定->给?赋值,这里类型和顺序要一致!

$mysqli_stmt->bind_param("i",$id);

//绑定结果集

$mysqli_stmt->bind_result($id,$name,$email);

//执行

$mysqli_stmt->execute();

//取出绑定的值

while($mysqli_stmt->fetch()){

echo "<br/>--$id--$name--$email---";

}

//关闭资源

//释放结果

$mysqli_stmt->free_result();

//关闭预编译语句

$mysqli_stmt->close();

//关闭链接

$mysqli->close();

Id>10的都列出来了!

地址引用,所以结果能返回回来!

Sql注入的情况:

还有一种方式,用limit命令也可导致!

不小心输入的命令,就可以获取到更多的信息,这对开发者来说,是非常危险的漏洞!

案例3:

<?php

function showtable($table_name){

$mysqli=new mysqli("localhost","root","123456","test");

if (mysqli_connect_error()){

die (mysqli_connect_error());

}

$sql="select * from $table_name";

$res=$mysqli->query($sql);

echo "共有 行".$res->num_rows."--列=".$res->field_count;

$res->free();

$mysqli->close();

}

showtable("user");

本文转自 gjp0731 51CTO博客,原文链接:http://blog.51cto.com/guojiping/1323190

转载地址:http://fszeo.baihongyu.com/

你可能感兴趣的文章
jdk1.8 HashMap源码分析(resize函数)
查看>>
再看static数据成员
查看>>
Pthon Matplotlib 画图
查看>>
十种排序算法实例说明总结
查看>>
Python 语言之 map/reduce
查看>>
Vue.js - Day4
查看>>
mysql之用户
查看>>
053(三十五)
查看>>
AddonSU Packages now available for LineageOS 15.1
查看>>
UVa 10970 - Big Chocolate
查看>>
SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest...
查看>>
小米:开源不仅要站在巨人的肩膀上,还要为巨人指方向
查看>>
百度启动高管退休计划,总裁张亚勤今年十月退休
查看>>
SpringBoot启动时的Banner设置
查看>>
xming + putty 搭建远程图形化ssh访问ubuntu 14.04
查看>>
【Sigma敏捷版系列文章】从运行流程和list-watch看kubernetes系统的设计理念
查看>>
两列布局——但只用右浮动
查看>>
GNOME 网页浏览器 Epiphany 将要进行 5 项改进
查看>>
今年CES最大亮点:智能语音助手正成为新趋势
查看>>
Windows Mysql Server重启, log-bin路径配置
查看>>