PHP:PDO预处理机制在防SQL注入的作用/PDO CURD预处理/PDO预处理中bindValue与bindParam的不同之处

一.PDO预处理机制在防SQL注入的作用

  • pdo预处理机制 防止sql注入
  • pdo使用 ?参数占位符 或者 命名占位符 :name
需要使用到的方法含义
prepare()准备一条将要执行的预处理语句 返回的是pdo statement 对象
bindParam()绑定一个参数到指定的变量名
execute()执行一条预处理语句

①未防止SQL注入之前


‘ or 1=1 # 这个是一条SQL注入语句,我的数据库中没有这个账号,我们没有防止SQL注入造成的后果就是,别人随便用一条SQL语句就可以获取到我们服务器中的账号和密码,后果非常严重,所以在用户登入的时候一定要防止SQL注入

②防止SQL注入之后


大家可以看到防止SQL注入之后就获取不到我们服务器里面的信息啦!所以在做登入界面的时候一定不要忘记了防止SQL注入哦!

防止SQL注入代码块

  1. /pdo预处理机制 防止sql注入
  2. //pdo使用 ?参数占位符 或者 命名占位符 :name
  3. $select = "SELECT `uname`, `pwd` FROM user WHERE `uname` = '?';";
  4. //prepare()方法 - 准备一条将要执行的预处理语句 返回的是pdo statement 对象
  5. //bindParam()绑定一个参数到指定的变量名
  6. //execute() 执行一条预处理语句
  7. $stmt = $pdo->prepare($select);
  8. $stmt->bindParam(1,$username,PDO::PARAM_STR);
  9. $stmt->execute();
  10. $res = $stmt->fetch();

二.PDO CURD预处理

①查询 SELECT FROM

SELECT FROM 代码块

  1. /*
  2. * ①查询 SELECT FROM
  3. */
  4. $username = 'a123456';
  5. $sql = "SELECT * FROM user WHERE `uname` = ? ;";
  6. $stmt = $pdo->prepare($sql);
  7. $stmt->bindParam(1,$username);
  8. $stmt->execute();
  9. if ($stmt->rowCount() > 0) {
  10. echo "查找成功".$stmt->rowCount()."记录";
  11. }

②增加 INSERT INTO

INSERT INTO 代码块

  1. $SQL = "INSERT INTO `user` SET `uname` = ? ,`pwd` = ? ,`create_time` = ? ; ";
  2. $stmt = $pdo->prepare($SQL);
  3. $username = 'a888';
  4. $password = 'a888';
  5. $create_time = time();
  6. $stmt->bindParam(1,$username);
  7. $stmt->bindParam(2,$password);
  8. $stmt->bindParam(3,$create_time);
  9. $stmt->execute();
  10. if ($stmt->rowCount() > 0) {
  11. echo "增加成功".$stmt->rowCount()."记录,新增id:".$pdo->lastInsertId();
  12. }

③更新 UPDATE SET

UPDATE SET 代码块

  1. $sql = "UPDATE `user` SET `uname` = ? WHERE `id` = ?; ";
  2. $stmt = $pdo->prepare($sql);
  3. $stmt->execute(['a999',3]);
  4. if ($stmt->rowCount() >0) {
  5. echo "更新成功".$stmt->rowCount()."条记录";
  6. }

④删除 DELETE FROM

DELETE FROM 代码块

  1. $sql = "DELETE FROM `user` WHERE `id` = ? ;";
  2. $stmt = $pdo->prepare($sql);
  3. $stmt->execute([3]);
  4. if ($stmt->rowCount() >0) {
  5. echo "删除成功".$stmt->rowCount()."记录";
  6. }

三.PDO预处理中bindValue与bindParam的不同之处

  • bindParam()和bindValue()之间的区别:

  • bindParam()

    • bindParam()函数将参数绑定到SQL语句中的命名或问号占位符。

    • bindParam()函数用于传递变量而不是值。

  • bindValue()

    • bindValue()函数将值绑定到SQL语句中的命名或问号。

    • bindValue()函数用于传递值和变量。

①bindParam()

bindParam 代码块

  1. $stmt->bindParam(1,$username);
  2. $stmt->bindParam(2,$password);
  3. $stmt->bindParam(3,$create_time);

②bindValue()

bindValue 代码块

  1. $stmt->bindValue(1,"a888");
  2. $stmt->bindValue(2,"a888");
  3. $stmt->bindValue(3,time());

更多相关文章

  1. 0512 作业
  2. 手写spring+springmvc+mybatis框架篇【开篇】
  3. 3.分治算法的设计思想与分析方法: 芯片测试, 快速排序, 幂乘算法
  4. IOC 控制反转与 DI 依赖注入
  5. sql 注入
  6. 实验吧 看起来有点难(手工注入加sqlmap注入)
  7. Amazon blink 智能安全摄像头被发现命令注入漏洞
  8. ***技巧,小总结!
  9. HMS Core赋能移动金融,为行业注入增长新动力

随机推荐

  1. c++输出二维字符矩阵对齐
  2. C++实现逐行读取txt文件中的字符串以及文
  3. openjudge 2971:抓住那头牛 解题过程(附代
  4. C#学习之面向对象如何调用类以及普通方法
  5. Ruby和C ++之间的异同点是什么?
  6. .net中的重载是什么?
  7. C++ vector容器函数使用范例
  8. 【C语言】5种妙招教你轻松搞定变量值交换
  9. c++经典例题之先序二叉树的构建
  10. C#用来做什么的