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); } }
额外问题修复
未定义变量导致插入失败
代码中$nombrereal和$nombredeinvocador未赋值,会触发PHP警告且插入数据为空,需补充赋值逻辑:// 在创建数据库实例前添加 $nombrereal = $_GET['nombrereal'] ?? ''; // 处理参数不存在的场景 $nombredeinvocador = $data; // 复用之前获取的召唤师名称异常类型不匹配
当前使用原生SQLite3扩展,但捕获的是PDOException,无法正确捕获SQLite3错误,需替换为对应异常类型:// 替换原PDOException捕获块 } catch(SQLite3Exception $e){ $result['message'] = $e->getMessage(); }错误码混淆说明
你提到的SQLSTATE[HY000] [2002]是MySQL的连接错误码,这说明要么错误信息串扰,要么代码存在未展示的PDO连接逻辑。启用SQLite3异常模式后,会返回正确的SQLite3错误信息,便于精准排查。
验证步骤
在脚本开头添加以下代码,确认工作目录与脚本目录的差异:
echo "当前工作目录:" . getcwd() . "<br>"; echo "脚本所在目录:" . __DIR__ . "<br>";
内容的提问来源于stack exchange,提问作者Juan jo
相关产品推荐
相关产品推荐

