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);© 版权声明
1.如需技术支持联系QQ:1339833655
2. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
3. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
4. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
5. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
6. 如有链接无法下载、失效或广告,请联系管理员处理!
7. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
8. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员!
THE END
暂无评论内容