php操作mysql及防注入基础

最近写接口过程中需要用到php和mysql,使用过程中发现了一般的操作方法有sql注入风险,后来使用了PDO,PDO是什么呢?
PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。
PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。

使用PDO我们可以用bindValue函数,它可以有效防止sql注入,这样便于我们基础开发

首先当然是连接数据库喽!可以写一个公共的数据库信息文件定义常量

<?php 
/** 
* PDO数据库连接 
* @author 捕风阁 
* @time 2020.2.1 
*/ 
// include "config.php"; 
$dsn = "mysql:dbname=test;host=localhost"; 
$user = 'root'; 
$password = 'root'; 
try { 
    $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));
} catch (PDOException $e) {
    echo '数据库连接失败' . $e->getMessage();
}

 

接下来就到了紧张刺激的操作环节了

查询

$sql = "select * from test where iuser = :name";
	$res = $dbh->prepare($sql);
	//使用bindValue()绑定参数防止注入
	$res->bindValue(":name",$username);
	$res->execute();
	$row = $res->fetch(PDO::FETCH_ASSOC);

这里顺带要说一下这两个函数,不对还有一个

fetch()    返回单个的元组,也就是一条记录(row)

fetchAll()  返回多个元组,即返回多个记录(rows)

rowCount() 返回结果行数 $row = $res->rowCount();

 

另外还得说一下里面的PDO方法

PDO::FETCH_ASSOC   从结果集中获取以列名为索引的关联数组。
PDO::FETCH_NUM      从结果集中获取一个以列在行中的数值偏移量为索引的值数组。
PDO::FETCH_BOTH     这是默认值,包含上面两种数组
PDO::FETCH_OBJ         从结果集当前行的记录中获取其属性对应各个列名的一个对象。
PDO::FETCH_BOUND 使用fetch()返回TRUE,并将获取的列值赋给在bindParm()方法中指定的相应变量。
PDO::FETCH_LAZY       创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这 三种接口中任选一种。

 

新增

$sql="insert into test (user,trade,time,money,state) values (:user,:trade,:time,:money,:state)";
	$res = $dbh->prepare($sql);
	//防止注入
	$res->bindValue(":user",$username);
	$res->bindValue(":trade",$trade);
	$res->bindValue(":time",$time);
	$res->bindValue(":money",$money);
	$res->bindValue(":state",$state);
	$res->execute();
	$row = $res->rowCount();

 

修改

$sql="update test set i=0,vip=0,flag=0 where user = :user";
	$res = $dbh->prepare($sql);
	$res->bindValue(":user",$username);
	$res->execute();
	$row = $res->rowCount();

 

删除

$sql="delete from test where id>5";
	$res = $dbh->prepare($sql);
	$res->execute();
	$row = $res->rowCount();

 

最后可以用json_encode($row)输出json形式的数据

echo(json_encode($row));

goodbye,今天 你戴口罩了吗?

图片[1] - php操作mysql及防注入基础 - 捕风阁

 

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片