PHP与MYSQL数据库交互四步
01 建立连接
02 接收输入
03 执行SQL
04 处理结果
<?php
// 第一步:建立数据库连接(拨号)
$db_host = '127.0.0.1'; // 本地数据库地址
$db_user = 'root'; // 数据库账号
$db_pass = 'root'; // 密码
$db_name = 'school'; // 选择的数据库名
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
if (!$conn) {
die("数据库连接失败: " . mysqli_connect_error());
}
if($_POST){
// 第二步:接收用户输入(登录页的账号密码)
$name = $_POST['name']; // POST方式,因为下面的html代码中是post发送请求的
$pwd = $_POST['password'];
// 第三步:执行SQL查询(漏洞根源)
$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
$result = mysqli_query($conn, $sql);
// 第四步:处理结果(反馈登录状态)
if (mysqli_num_rows($result) > 0) {
$user_info = mysqli_fetch_assoc($result);
echo "登录成功!欢迎你:" . $user_info['name']."你的身份证号是:".$user_info['id_card']."你的手机号是:".$user_info['phone'];
} else {
echo "登录失败:用户名或密码错误";
}
}
// 关闭连接
mysqli_close($conn);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form method="post">
用户名:<input type="text" name="name"><br><br>
密 码:<input type="password" name="password"><br><br>
<button type="submit">登录</button>
</form>
</body>
</html>
说明一下;上面的PHP代码中有用户登陆成功就会将那个用户的信息显示出来,是利用了以下代码:
$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
$result = mysqli_query($conn, $sql);
如果是用户登陆失败,要显示用户信息用户界面的用户名输入or 1=1 #
相对于将
$sql = "SELECT * FROM users WHERE name='$name' AND password='$pwd'";
改:
$sql = "SELECT * FROM users WHERE name='$name' or 1=1 # AND password='$pwd'";
上面的漏洞是后端代码没有过滤or,所以有漏洞