如何在访问PHP的链接中传入邮箱和密码两个必填参数?
正确的URL参数传递与SQL查询写法
首先解决你的URL参数传递问题:
- 当需要传递多个GET参数时,第一个参数用
?开头,后续参数之间用&分隔,不需要重复使用?,也不用加SQL里的AND(那是数据库查询的逻辑运算符,和URL参数规则无关)。 - 正确的链接写法应该是:
www.example.com/login.php?Email=test@gmail.com&Password=something50
接下来是你的SQL查询问题,这里有两个明显错误,还有一个严重的安全隐患:
- 语法与逻辑错误:你的查询里
AND前后没有空格,导致SQL语法报错;而且密码部分没指定匹配的字段名,另外看起来你把邮箱错误地放到了ID字段的条件里,应该是匹配Email字段才对。
修正后的基础写法(先不考虑安全问题):$sql = "SELECT * FROM User WHERE Email='".$email."' AND Password='".$pass."'"; - SQL注入风险:直接把用户输入的邮箱、密码拼接到SQL语句里是极度危险的,很容易被攻击者利用SQL注入窃取或破坏你的数据库。强烈推荐使用**预处理语句(Prepared Statements)**来规避这个问题,下面给你两个常用的实现示例:
使用mysqli的预处理语句
// 假设你已经建立了mysqli连接$conn $email = $_GET['Email']; $pass = $_GET['Password']; // 准备预处理语句 $stmt = $conn->prepare("SELECT * FROM User WHERE Email=? AND Password=?"); // 绑定参数("ss"表示两个参数都是字符串类型) $stmt->bind_param("ss", $email, $pass); // 执行查询 $stmt->execute(); // 获取查询结果 $result = $stmt->get_result(); // 取出用户数据 $user = $result->fetch_assoc();
使用PDO的预处理语句
// 假设你已经建立了PDO连接$pdo $email = $_GET['Email']; $pass = $_GET['Password']; // 准备并执行预处理语句 $stmt = $pdo->prepare("SELECT * FROM User WHERE Email=? AND Password=?"); $stmt->execute([$email, $pass]); // 取出用户数据 $user = $stmt->fetch(PDO::FETCH_ASSOC);
最后补充一个重要的安全提示:实际项目里绝对不要明文存储用户密码,应该用PHP内置的password_hash()函数生成哈希值后存储,验证密码时用password_verify()来比对,这样即使数据库泄露,用户的真实密码也不会被窃取。
内容的提问来源于stack exchange,提问作者autostart_50
相关产品推荐
相关产品推荐

