PDO预处理对数据的操作(增删查改)

PDO预处理对数据的操作(增删查改)

一、PDO预处理对数据的操作(增删查改)

什么是预处理

PDO预处理语句(prepared statement)机制,是将一条SQL命令向数据库服务器发送一次(此时发送的参数不是实参,是占位符),以后参数发生变化,数据库服务器只需对命令的结构做一次分析就够了。对于复杂的查询,此过程要花费较长的时间,如果需要以不同参数多次重复相同的查询,那么该过程将大大降低应用程序的速度。通过使用预处理语句,可以避免重复分析/编译/优化周期。简言之,预处理语句占用更少的资源,因而运行得更快// 预处理机制,sql中的数据使用占位符// 命名参数占位符,文号参数占位符预处理能防止S专业系统搭建点我wcqh.cnQL注入

传统处理

php文件

// 数据库的操作require __DIR__ ./config/connect.php;$user = json_decode(file_get_contents(php://input),true);$uname = $user[username];$pwd = sha1($user[password]);$sql =“select * from user where uname = {$uname} and pwd = {$pwd};”;//echo $sql;print_r($db->query($sql)->fetchAll());

从以上截图可以得知,用户在前端可以通过输入专业系统搭建点我wcqh.cn相关编译码,获取到不可思议的数据。

预处理

php文件

// 预处理机制,sql中的数据使用占位符// 命名参数占位符,文号参数占位符// 预处理sql语句// $sql = INSERT user VALUES(null, :uname, :pwd, :status);;$sql =SELECT * FROM user WHERE uname=? AND pwd=?;// 预处理要执行的语句,并返回语句对象 (PDOStatement)$stmt = $db->prepare($sql);// 将具体的值绑定到占位符参数上$stmt->bindValue(1,$uname);$stmt->bindVal专业系统搭建点我wcqh.cnue(2, $pwd);if($stmt->execute()){ $users = $stmt->fetchAll(); echo json_encode($users);}else{die(查询失败:. $stmt->errorInfo());}

通过pdo预处理,应用程序只使用预处理语句,可以防止发生SQL注入。

1、INSERT:新增

// ! 新增数据// 预处理机制,sql中的数据使用占位符// 命名参数占位符,文号参数占位符// 预处理sql语句$sql =INSERT user VALUES(null, :uname, :pwd, :status);;// 预处理要执行的语句,并返回语句对象 (P专业系统搭建点我wcqh.cnDOStatement)$stmt = $db->prepare($sql);// 将具体的值绑定到占位符参数上$stmt->bindValue(:uname,隔壁老李11);$stmt->bindValue(:pwd, sha1(123));$stmt->bindValue(:status,1);if($stmt->execute()){// 打印一条sql预处理命令// $stmt->debugDumpParams(); echo 新增成功,新记录的主键id=. $db->lastInsertId();}else{ $stmt->errorInfo();}

2、SELECT:查询

$sql =SELECT i专业系统搭建点我wcqh.cnd,uname FROM user WHERE id > ?;// 预处理要执行的语句,并返回语句对象 (PDOStatement)$stmt = $db->prepare($sql);// 将具体的值绑定到占位符参数上$stmt->bindValue(1,10);if($stmt->execute()){// 返回受上一个SQL语句影响的行数// 1. 逐条 fetch + while// 2. 多条 fetchAll + foreach $users = $stmt->fetchAll();foreach($users as $user){ extract($user); vprintf(“%d: %s\n专业系统搭建点我wcqh.cn,[$id,$uname]);}}else{die(查询失败:. $stmt->errorInfo());}

3、DELETE:删除

// ! 删除数据$sql =delete from user where id = ? ;if(!stristr($sql,where)){die(禁止无条件删除);}// 预处理要执行的语句,并返回语句对象 (PDOStatement)$stmt = $db->prepare($sql);$stmt->bindValue(1,5);if($stmt->execute()){if($stmt->rowCount()>0){ echo 删除成功;}else{ echo 没有记录被删专业系统搭建点我wcqh.cn;}}else{die(删除失败:. $stmt->errorInfo());}

4、UPDATE:更新

// ! 更新数据$sql =UPDATE user SET status = ? WHERE uname = ? ;;// 预处理要执行的语句,并返回语句对象 (PDOStatement)$stmt = $db->prepare($sql);$stmt->bindValue(1,2);$stmt->bindValue(2,隔壁老李1);if($stmt->execute()){if($stmt->rowCount()>0){ echo 更新成功. $stmt->rowCount().条数据;}else{专业系统搭建点我wcqh.cn echo 没有更新数据;}}

占位符使用方法:

方法1:将具体的值绑定到占位符上 $sql =INSERT user VALUES(null, :uname, :pwd, :status);;// 将具体的值绑定到占位符参数上$stmt->bindValue(:uname,隔壁老李11);$stmt->bindValue(:pwd, sha1(123));$stmt->bindValue(:status,1); 方法2:按顺序绑定到占位符上 $sql =SELECT * FROM user WHERE uname=? AND pwd=?;$stmt->bindValue(1, $uname);$stmt->bin专业系统搭建点我wcqh.cndValue(2, $pwd);
批改老师:PHPz 批改状态:合格 老师批语:
作者最新博文
2019-10-08 13:01:48

© 版权声明
THE END
喜欢就支持一下吧
点赞752 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容