PHP代码第8行出现Parse error: syntax error, unexpected T_VARIABLE报错求助
解决PHP语法错误:Parse error: syntax error, unexpected T_VARIABLE
嘿,我一眼就揪出问题所在啦!你遇到的这个语法错误,根源是SQL查询语句里的双引号嵌套冲突,导致PHP没法正确解析代码。
错误原因分析
原代码第8行的SQL查询部分:
mysqli_query($con,"select*from user101 where email="$email" and password="$password"")
你用双引号包裹了整个SQL字符串,但里面又用双引号去包裹$email和$password变量——PHP会把email=后面的双引号当成整个字符串的结束标记,紧接着的$email就变成了无意义的独立变量,直接触发了语法错误。
修复方案(两种方式,强烈推荐第二种)
方案1:修正字符串拼接逻辑
要么去掉变量外的多余双引号(双引号字符串里可以直接解析变量),要么用字符串连接符.拼接变量和SQL片段:
<?php session_start(); $email=$_REQUEST['email']; $password=$_REQUEST['password']; $con=mysqli_connect("localhost","root","","mydb"); // 修复后的查询:去掉变量外的双引号,同时给select和*加空格提升可读性 if(mysqli_fetch_array(mysqli_query($con,"select * from user101 where email='$email' and password='$password'"))) { $_SESSION['email']=$email; // 注意:echo内容会导致header跳转失效,建议注释或移除 // echo "login successful"; header("Location:welcome.php"); exit; // 跳转后终止脚本执行 } else { echo "Login failed"; } ?>
方案2:使用预处理语句(安全首选,避免SQL注入)
原代码直接把用户输入拼到SQL里存在严重的SQL注入风险,用预处理语句既能彻底解决语法问题,又能大幅提升代码安全性:
<?php session_start(); // 登录请求建议用$_POST而非$_REQUEST,更严谨 $email=$_POST['email'] ?? ''; $password=$_POST['password'] ?? ''; $con=mysqli_connect("localhost","root","","mydb"); // 准备预处理SQL语句,用?作为占位符 $stmt = mysqli_prepare($con, "SELECT * FROM user101 WHERE email = ? AND password = ?"); // 绑定参数:"ss"表示两个字符串类型的参数,对应$email和$password mysqli_stmt_bind_param($stmt, "ss", $email, $password); // 执行语句 mysqli_stmt_execute($stmt); // 获取结果集 $result = mysqli_stmt_get_result($stmt); if(mysqli_fetch_array($result)) { $_SESSION['email']=$email; header("Location:welcome.php"); exit; } else { echo "Login failed"; } // 清理资源 mysqli_stmt_close($stmt); mysqli_close($con); ?>
额外小提醒
- 不要用
$_REQUEST接收敏感输入,登录请求优先用$_POST; - 数据库里绝对不能明文存储密码!应该用
password_hash()加密,验证时用password_verify(); header()跳转前不能输出任何内容(包括echo、空格、换行),否则会因为HTTP头已发送而失效。
内容的提问来源于stack exchange,提问作者happyswine44
相关产品推荐
相关产品推荐

