最近写接口过程中需要用到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,今天 你戴口罩了吗?
暂无评论内容