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());