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

本文详细介绍了PHP PDO预处理机制如何防止SQL注入,通过实例展示了预处理在SELECT、INSERT、UPDATE和DELETE操作中的应用。同时,讨论了bindParam和bindValue的区别,前者绑定变量,后者直接绑定值,强调了在参数绑定中的注意事项。
摘要由CSDN通过智能技术生成

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注入代码块

/pdo预处理机制  防止sql注入
//pdo使用 ?参数占位符 或者 命名占位符 :name 
$select = "SELECT `uname`, `pwd` FROM user WHERE `uname` = '?';";

//prepare()方法 - 准备一条将要执行的预处理语句 返回的是pdo statement 对象
//bindParam()绑定一个参数到指定的变量名
//execute() 执行一条预处理语句
$stmt = $pdo->prepare($select);
$stmt->bindParam(1,$username,PDO::PARAM_STR);
$stmt->execute();
$res = $stmt->fetch();

二.PDO CURD预处理
①查询 SELECT FROM

SELECT FROM 代码块

/*
* ①查询 SELECT FROM
*/
$username = 'a123456';
$sql = "SELECT * FROM  user WHERE `uname` = ? ;";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(1,$username);
$stmt->execute();



if ($stmt->rowCount() > 0) {
    echo "查找成功".$stmt->rowCount()."记录";
}

②增加 INSERT INTO

INSERT INTO 代码块

$SQL = "INSERT INTO `user` SET `uname` = ? ,`pwd` = ? ,`create_time` = ? ; ";
$stmt = $pdo->prepare($SQL);

$username = 'a888';
$password = 'a888';
$create_time = time();

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

$stmt->execute();

if ($stmt->rowCount() > 0) {
    echo "增加成功".$stmt->rowCount()."记录,新增id:".$pdo->lastInsertId();
}

③更新 UPDATE SET

UPDATE SET 代码块

$sql = "UPDATE `user` SET `uname` = ? WHERE `id` = ?; ";
$stmt = $pdo->prepare($sql);
$stmt->execute(['a999',3]);

if ($stmt->rowCount() >0) {
    echo "更新成功".$stmt->rowCount()."条记录";
}

④删除 DELETE FROM

DELETE FROM 代码块

$sql = "DELETE FROM `user` WHERE `id` = ? ;";
$stmt = $pdo->prepare($sql);
$stmt->execute([3]);

if ($stmt->rowCount() >0) {
    echo "删除成功".$stmt->rowCount()."记录";
}

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

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

  • bindParam()

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

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

  • bindValue()

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

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

①bindParam()

bindParam 代码块

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

②bindValue()

bindValue 代码块

$stmt->bindValue(1,"a888");
$stmt->bindValue(2,"a888");
$stmt->bindValue(3,time());
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值