批改状态:合格
老师批语:
作业内容:1. 请实例演绎pdo在用户登录环节是怎么防sql注入的? 2. 写一个小实战, 实现预处理与会话跟踪?


登录函数代码
function login($username,$password){global $pdo;$flag=false;if( !empty($username) && !empty($password)){//可以把它看作是想要运行的SQL的一种编译过的模板//使用问号参数占位符来构成预处理语句$sql="SELECT `uname`,`pwd` FROM `user` WHERE `uname`=?AND `pwd`=?";//PDO::prepare-准备要执行的语句,并返回语句对象$stmt=$pdo->prepare($sql);//绑定一个PHP变量到用作预处理的SQL语句中的对应问号占位符// $stmt->bindParam(1,$username,PDO::PARAM_STR);//$stmt->bindParam(2,$password,PDO::PARAM_STR);//执行一条预处理语句 成功时返回true,或者在失败时返回false$stmt->execute([$username,$password]);$res = $stmt->fetch();if($res){$_SESSION['uname'] = $res['uname'];$flag=true;}// foreach($stmt as $v)// {// print_r($v);// }// die;return $flag;}}
<?php//公共模型文件session_start();//开启seesionrequire '1-connect.php';/*** 检测用户注册用户名是否被占用* param:用户名* return : 被占用返回true未被占用返回false*/function checkUname($username){global $pdo;$isOccupied=false;//默认数据库不存在同名用户名$sql="SELECT `uname` FROM `user` WHERE `uname`='{$username}'";$res=$pdo->query($sql)->fetch();//已存在同名昵称if($res){$isOccupied=true;}return $isOccupied;}/**** param:用户名注册 用户名 密码 性别 创建时间* return : 注册成功返回true 失败返回false*/function insertData($username, $password, $gender, $create_time){global $pdo;$flag=false;if( !empty($username) && !empty($password) && !empty($gender)){$sql="INSERT INTO `user` SET `uname`='{$username}',`pwd`='{$password}',`gender`={$gender},`create_time`={$create_time};";$res=$pdo->exec($sql);if($res){$flag=true;}}return $flag;}/*** param:用户登录 用户名 密码* return:登录成功返回true 失败返回false*/function login($username,$password){global $pdo;$flag=false;if( !empty($username) && !empty($password)){//可以把它看作是想要运行的SQL的一种编译过的模板//使用问号参数占位符来构成预处理语句$sql="SELECT `uname`,`pwd` FROM `user` WHERE `uname`=?AND `pwd`=?";//PDO::prepare-准备要执行的语句,并返回语句对象$stmt=$pdo->prepare($sql);//绑定一个PHP变量到用作预处理的SQL语句中的对应问号占位符// $stmt->bindParam(1,$username,PDO::PARAM_STR);//$stmt->bindParam(2,$password,PDO::PARAM_STR);//执行一条预处理语句 成功时返回true,或者在失败时返回false$stmt->execute([$username,$password]);$res = $stmt->fetch();if($res){$_SESSION['uname'] = $res['uname'];$flag=true;}// foreach($stmt as $v)// {// print_r($v);// }// die;return $flag;}}
<?session_start()?><!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=欢迎, initial-scale=1.0"><title>Document</title></head><body>欢迎<?=$_SESSION['uname']?>,来到php中文网后台</body></html>
效果将admin用户名带过去
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号