从数据库取值并输出时页面返回404错误,该如何解决?
解决PHP数据库查询时返回404错误的问题
我来帮你排查这个问题——虽然404通常是页面不存在的错误,但结合你的代码来看,大概率是代码逻辑或执行过程中触发了服务器异常,导致页面无法正常返回,下面一步步分析解决:
先确认页面路径是否正确
404最直接的原因是你访问的URL对应的PHP文件不存在,或者路径写错了。先检查:- 你输入的访问URL(比如
http://你的域名/xxx.php)和服务器上的实际文件路径完全匹配 - 文件名大小写是否正确(Linux服务器严格区分大小写,Windows不区分)
- 你输入的访问URL(比如
修复数据库结果的错误处理
你的代码里直接echo了查询返回的mysqli_result对象,这是错误的!$mysqli->query()返回的是结果集对象,不是直接的字段值,直接输出会触发异常,部分服务器配置下会因此返回404。正确的写法是取出结果里的字段:<?php // 先检查数据库连接是否成功 $mysqli222 = mysqli_connect('HIDDEN', 'HIDDEN', 'HIDDEN', 'HIDDEN'); if (!$mysqli222) { die("数据库连接失败: " . mysqli_connect_error()); } // 确保$MyValue1已定义(比如来自GET参数) $MyValue1 = $_GET['urlcode'] ?? ''; // 先修正结果处理逻辑,后续建议用预处理语句避免注入 $result2222 = $mysqli222->query("SELECT HIDDEN1 FROM HIDDEN2 WHERE urlcode = '$MyValue1'"); if($result2222->num_rows == 0) { echo 'ERROR!'; } else { // 从结果集中取出一行数据 $row = $result2222->fetch_assoc(); // 输出目标字段值 echo $row['HIDDEN1']; } // 释放结果集并关闭连接 $result2222->free(); $mysqli222->close(); ?>排查变量未定义与SQL注入风险
你的代码里用到了$MyValue1但没看到定义,如果这个变量未赋值,会触发PHP警告,部分服务器会隐藏错误并返回404。另外直接拼接变量到SQL语句里有严重的SQL注入风险,建议改用预处理语句:// 预处理语句示例(更安全) $stmt = $mysqli222->prepare("SELECT HIDDEN1 FROM HIDDEN2 WHERE urlcode = ?"); $stmt->bind_param("s", $MyValue1); // "s"表示参数为字符串类型 $stmt->execute(); $result = $stmt->get_result(); if($result->num_rows == 0) { echo 'ERROR!'; } else { $row = $result->fetch_assoc(); echo $row['HIDDEN1']; } $stmt->close();查看服务器错误日志
如果以上步骤都没解决,去查看服务器的PHP错误日志或Apache/Nginx的访问日志,日志里会记录具体的错误原因(比如数据库连接失败、语法错误等),这是排查这类问题最有效的方式。
内容的提问来源于stack exchange,提问作者AdelSbeh20192
相关产品推荐
相关产品推荐

