批改状态:合格
老师批语:
| 需要使用到的方法 | 含义 |
|---|---|
| prepare() | 准备一条将要执行的预处理语句 返回的是pdo statement 对象 |
| bindParam() | 绑定一个参数到指定的变量名 |
| execute() | 执行一条预处理语句 |


‘ or 1=1 # 这个是一条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();

/** ①查询 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()."记录";}

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

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

$sql = "DELETE FROM `user` WHERE `id` = ? ;";$stmt = $pdo->prepare($sql);$stmt->execute([3]);if ($stmt->rowCount() >0) {echo "删除成功".$stmt->rowCount()."记录";}
bindParam()和bindValue()之间的区别:
bindParam()
bindParam()函数将参数绑定到SQL语句中的命名或问号占位符。
bindParam()函数用于传递变量而不是值。
bindValue()
bindValue()函数将值绑定到SQL语句中的命名或问号。
bindValue()函数用于传递值和变量。

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

$stmt->bindValue(1,"a888");$stmt->bindValue(2,"a888");$stmt->bindValue(3,time());
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号