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

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

JiaJieChen
JiaJieChen原创
2021年05月14日 16:40:311206浏览

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());
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议