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

PHP致命错误:在null上调用run_query()方法的问题求助

解决 "Call to a member function run_query() on null" 错误及代码问题

Hey,我来帮你搞定这个致命错误,顺便揪出代码里的其他隐性问题:

一、核心致命错误:$obj 未被正确初始化

这个错误的本质是:你调用run_query()方法的$obj变量是null——也就是说,这个对象根本不存在,自然没法调用它的方法。

常见的触发场景:

  • 没引入定义数据库类的文件:你的run_query()方法大概率是写在某个数据库操作类里的,但login.php里没有用require/include加载这个类文件;
  • 类文件加载了,但没实例化:比如漏掉了$obj = new YourDatabaseClass();这行关键代码;
  • 实例化失败:比如类的构造函数需要传入数据库连接参数(主机、账号、密码),你没传或者传错了,导致实例化出来的对象是null。

修复步骤:

  1. 先确认加载了数据库类文件,在login.php开头添加:
    require_once 'path/to/your/database-class.php'; // 替换成你的类文件实际路径,比如db.class.php
    
  2. 在调用$obj->run_query()之前,正确实例化类:
    // 假设你的数据库类名为DbConnection,根据实际类名和参数调整
    $obj = new DbConnection('localhost', 'db_username', 'db_password', 'db_name');
    // 加个简单检查确保实例化成功
    if (!isset($obj) || is_null($obj)) {
        die("数据库对象初始化失败,请检查连接参数");
    }
    

二、SQL查询中的变量错误(隐性bug)

看你的代码片段:

$name = $_POST['username'];
$query = "SELECT * FROM users WHERE username = '$email'";

这里你把表单提交的用户名存在了$name变量里,但SQL语句里却用了未定义的$email!这会导致查询条件变成username = '',就算前面的$obj没问题,也查不到任何数据,还会触发未定义变量的警告。

修复方法:
把SQL里的$email改成$name,同时为了避免SQL注入风险,一定要用预处理语句(绝对不要直接拼接变量到SQL里),比如:

// 使用预处理语句避免SQL注入
$query = "SELECT * FROM users WHERE username = ?";
// 假设你的数据库类支持预处理,或者用mysqli原生方法
$stmt = $obj->prepare($query);
$stmt->bind_param("s", $name);
$stmt->execute();
$result = $stmt->get_result();

三、其他小问题:变量名拼写错误

你的代码里写了$result = $obj->run_query($query);,但后面判断行数时用的是mysqli_num_rows($res...——这里的$res应该是$result吧?变量名拼写错误会导致后续代码无法获取查询结果行数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:38