Mysqli 扩展库增强-----预处理技术 mysqli stmt

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

该方案防止sql注入

wps_clip_image-1584

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

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

wps_clip_image-31946

wps_clip_image-10414

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

如果继续添加,就不需要再执行$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();

wps_clip_image-26582

wps_clip_image-19472

执行时,一次添加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();

wps_clip_image-15295

Id>10的都列出来了!

wps_clip_image-21327

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

wps_clip_image-26037

Sql注入的情况:

wps_clip_image-15475

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

wps_clip_image-722

wps_clip_image-12955

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

wps_clip_image-12928

案例3:

wps_clip_image-32066

<?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");

wps_clip_image-5405


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



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 安全 关系型数据库
PDO 预处理|学习笔记
快速学习 PDO 预处理,本节学习PDO的预处理。与事务相同并不是PDO的功能,本节介绍PDO如何实现预处理。
205 0
PDO 预处理|学习笔记
|
关系型数据库 MySQL PHP
PDO 扩展|学习笔记
快速学习 PDO 扩展,掌握 PDO 扩展的加载
125 0
PDO 扩展|学习笔记
|
关系型数据库 MySQL 数据库连接
PDO 预处理数据绑定|学习笔记
快速学习 PDO 预处理数据绑定,PDO预处理数据绑定有多种方式。
210 0
PDO 预处理数据绑定|学习笔记
|
SQL PHP 开发者
封装 PDO(写操作)|学习笔记
快速学习封装 PDO(写操作)
48 0
|
SQL 关系型数据库 MySQL
PDO 写操作|学习笔记
快速学习 PDO 写操作,利用PDO类完成一个完整的写操作实现,实现数据库的操作。
58 0
PDO 写操作|学习笔记
|
Shell Serverless PHP
函数计算 php 运行环境添加 pdo_sqlite 扩展
编译pdo_sqlite并添加到函数计算php运行环境
676 0
函数计算 php 运行环境添加 pdo_sqlite 扩展
|
JavaScript 安全 前端开发
|
关系型数据库 MySQL 数据库