PHP中MySQL双查询仅其一返回结果的问题求助
问题分析与解决方案
问题描述
两个MySQL查询在phpMyAdmin中均可返回结果,但PHP页面中仅管理员验证的查询(compart='admin')正常,使用SESSION变量$dest的普通用户查询返回空结果。测试显示$dest值正常输出,但查询无数据返回。
排查与解决步骤
1. 确认数据库连接正确性
你引入了多个数据库连接文件,第一个查询使用的$con可能并非logtoforms表所在的数据库。检查connection.php中的$con是否指向与phpMyAdmin中测试时相同的数据库,避免因连接错库导致查询无结果。
2. 输出实际执行的SQL语句
将拼接后的SQL语句打印出来,直接复制到phpMyAdmin中执行,对比与手动测试的语句是否一致:
echo "执行的SQL语句: " . $sql . "<br>";
重点检查:
$dest是否存在前后空格、特殊字符(如单引号、转义字符)- 数据库中
compart字段的值与$dest的大小写是否匹配(MySQL在Linux系统下默认区分表名/字段值大小写)
3. 使用预处理语句避免拼接问题
直接拼接变量到SQL语句中可能因特殊字符导致语法错误,同时存在SQL注入风险。改用预处理语句执行查询:
// 替换原第一个查询代码 $sql = "SELECT * FROM `logtoforms` WHERE `compart` = ?"; $stmt = mysqli_prepare($con, $sql); mysqli_stmt_bind_param($stmt, "s", $dest); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); $record = mysqli_fetch_array($result);
4. 开启MySQLi错误提示
在代码开头添加错误提示代码,直接查看查询失败的具体原因:
error_reporting(E_ALL); ini_set('display_errors', 1); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
这会直接抛出MySQLi执行过程中的错误,比如语法错误、权限不足等问题。
5. 确认SESSION已正确开启
虽然你提到$dest在其他页面正常,但当前页面必须在任何输出之前调用session_start(),否则$_SESSION变量无法正常读取:
session_start(); // 放在页面最顶部,include之前 include('../PHP/connection.php'); // ... 其他代码
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

