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

PHP-SQLite3报错SQLSTATE[HY000] [2002]:torneo.db文件无法找到

问题排查与解决方案

核心原因:相对路径导致的工作目录不匹配

你遇到的问题大概率是PHP当前工作目录不等于脚本所在目录,导致'torneo.db'这个相对路径指向了错误位置——虽然文件和脚本同目录,但PHP执行时的工作目录可能不同(比如Apache虚拟主机根目录、CLI启动路径等)。

直接解决方案:使用绝对路径打开数据库

修改MyDB类构造函数,用__DIR__常量获取当前脚本的绝对目录,拼接数据库文件路径,确保无论工作目录如何都能定位到正确文件:

class MyDB extends SQLite3
{
    function __construct()
    {
        // 启用异常模式,便于捕获SQLite3原生错误
        $this->enableExceptions(true);
        // 拼接数据库绝对路径
        $dbAbsolutePath = __DIR__ . '/torneo.db';
        $this->open($dbAbsolutePath);
    }
}

额外问题修复

  1. 未定义变量导致插入失败
    代码中$nombrereal和$nombredeinvocador未赋值,会触发PHP警告且插入数据为空,需补充赋值逻辑:

    // 在创建数据库实例前添加
    $nombrereal = $_GET['nombrereal'] ?? ''; // 处理参数不存在的场景
    $nombredeinvocador = $data; // 复用之前获取的召唤师名称
    
  2. 异常类型不匹配
    当前使用原生SQLite3扩展,但捕获的是PDOException,无法正确捕获SQLite3错误,需替换为对应异常类型:

    // 替换原PDOException捕获块
    } catch(SQLite3Exception $e){
        $result['message'] = $e->getMessage();    
    }
    
  3. 错误码混淆说明
    你提到的SQLSTATE[HY000] [2002]是MySQL的连接错误码,这说明要么错误信息串扰,要么代码存在未展示的PDO连接逻辑。启用SQLite3异常模式后,会返回正确的SQLite3错误信息,便于精准排查。

验证步骤

在脚本开头添加以下代码,确认工作目录与脚本目录的差异:

echo "当前工作目录:" . getcwd() . "<br>";
echo "脚本所在目录:" . __DIR__ . "<br>";

内容的提问来源于stack exchange,提问作者Juan jo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:15:26