You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP报Undefined variable: con及null调用query()致命错误求助

报错信息
  • 提示级错误:Undefined variable: con,触发文件:D:\xampp\htdocs\tanmay.com\p\andooze\include\dbconfig.php,第15行
  • 致命错误:Uncaught Error: Call to a member function query() on null,触发文件:D:\xampp\htdocs\tanmay.com\p\andooze\include\dbconfig.php第15行,调用栈:
    • 栈帧0:front_header.php第3行通过require()引入dbconfig.php
    • 栈帧1:index.php第2行通过require()引入front_header.php
    • 栈帧2:主入口逻辑抛出未捕获异常
问题根因
  • 变量作用域错误:$con数据库连接对象仅在try代码块内初始化赋值,一旦数据库连接失败抛出异常,代码进入catch分支后不会给$con赋值,该变量不存在。后续在try/catch块外部直接调用$con->query()时,$con为null,直接触发两个报错。
  • 异常分支无阻断:catch块仅做了错误日志记录,没有终止后续执行逻辑,导致强依赖数据库连接的查询代码依然会运行。
  • 重复逻辑冲突:front_header.php开头重复调用session_start(),和dbconfig.php中已做的session启动判断逻辑冲突,会触发"session已启动"的额外警告。
修复方案
  1. 修改dbconfig.php代码,调整变量作用域、增加异常阻断,修复后代码如下:
<?php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// 提前初始化连接变量,避免未定义变量提示
$con = null;
try {
    // 数据库连接参数
    $con = new mysqli("localhost", "tanmayna_andooze", "andooze123@", "tanmayna_andooze");
    $con->set_charset("utf8mb4");
} catch(Exception $e) {
    error_log($e->getMessage());
    // 连接失败直接终止执行,返回通用提示
    die("数据库服务暂时不可用,请稍后重试");
}
// 连接成功后再执行查询逻辑
$fset = $con->query("select * from setting")->fetch_assoc();
$fetch_main = $con->query("select * from main_setting")->fetch_assoc();

date_default_timezone_set($fset['timezone']);
$dirname = dirname( dirname(__FILE__) ).'/api';
$dirname = dirname( dirname(__FILE__) ).'/rapi';
?>
  1. 修改front_header.php开头代码,删除重复的session启动逻辑:
<?php 
// 删除冗余的session_start()调用,dbconfig.php已做兼容处理
require 'dbconfig.php';
?>
  1. 额外排查项:如果修改代码后仍触发数据库连接错误,依次检查:
    • XAMPP控制面板中MySQL服务是否正常启动
    • 本地数据库中是否存在tanmayna_andooze这个库
    • 配置的数据库用户名、密码是否和本地XAMPP的数据库账号权限匹配

内容的提问来源于stack exchange,提问作者Tanmay Nandwana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:21:49