Blogger Information
Blog 70
fans 4
comment 5
visits 105122
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP:PDO预处理机制在防SQL注入的作用/PDO CURD预处理/PDO预处理中bindValue与bindParam的不同之处
JiaJieChen
Original
1209 people have browsed it

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());
Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post