【问题标题】:Call to a member function query() on null PHP5.6在空 PHP5.6 上调用成员函数 query()
【发布时间】:2020-01-13 15:21:38
【问题描述】:

我有 cerb2 https://github.com/wgm/cerb2,它是一个旧的票务系统,它可能看起来很奇怪,但我有很多我想利用的知识信息。 它基本上是一个带有 mysql_connect() 构造函数的 PHP5/Mysql 软件

主要问题是始终保持为空的查询。代码库基于类定义和伪变量 $this 来调用另一个类的查询方法。

function CER_HASH_QUEUES(&$parent)
{
    global $session;
    global $queue_access; e();
    $this->db = (new cer_Database())->getInstance();
    $this->_parent = &$parent;

    if(empty($queue_access))
        $this->queue_access = new CER_QUEUE_ACCESS();
    else
        $this->queue_access = $queue_access;

    $sql = "SELECT q.queue_id, q.queue_name FROM queue q ORDER BY q.queue_name";

    $res = $this->_db->query($sql);

最后一行 ($res =... ) 正在停止代码执行:

致命错误:在 null in 上调用成员函数 query()

从 cer_Database.class 调用的 Query 方法如下所示 (https://raw.githubusercontent.com/wgm/cerb2/stable/cerberus-api/database/cer_Database.class.php)

function query($sqlString,$return_assoc=true)
{
    $config_db = (new cerConfiguration())->getInstance();

    if($return_assoc === true) $this->db->SetFetchMode(ADODB_FETCH_ASSOC);
    else $this->db->SetFetchMode(ADODB_FETCH_NUM);

    $res = $this->db->Execute($sqlString);

    if($cfg->settings["debug_mode"]) {
        $time_end = microtime();
        $query_time = microtime_diff($time_end,$time_start) * 1000; // convert secs to millisecs
        echo "<b>[CERBERUS QUERY]:</b> " . $sqlString . " (Ran: <b>" . sprintf("%0.3f",$query_time) . "ms</b>)<hr>";
    }

    return $res;
}

最后一个方法依赖于第二个类 cerConfiguration(),它依赖于 import_config_db() 来构造 mysql 连接器。 我无法弄清楚如何按照此处相关软件携带的设计模式成功传递我的 sql 请求。 数据库和表都正常,下面的 php 脚本返回 sql 查询正常。

<?php
include('includes/third_party/adodb/adodb.inc.php');
$db = ADONewConnection('mysql'); 
$db->Connect("localhost", "user", "pass", "databasename");
$rs = $db->Execute('SELECT q.queue_id, q.queue_name FROM queue q ORDER BY q.queue_name');
print "<pre>";
print_r($rs->GetRows());
print "</pre>";

我想如果没有 PHP 使用的面向对象设计模式的理解,我将很难恢复那个旧软件。

非常欢迎任何帮助,想法。 你的。

【问题讨论】:

    标签: php pool mysql-connect


    【解决方案1】:

    致命错误:在 null in 上调用成员函数 query()

    您可能会在调查中发现更多问题,但您寻求帮助的问题相对简单。

    类中的数据库属性在您的代码中早期定义为$this-&gt;db,但您随后尝试以$this-&gt;_db 访问它。下划线使它成为不同的变量名,因此它不存在。所以它是空的,因此为什么你会得到Call to a member function query() on null

    要修复它,请确保您在整个课程中使用相同的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2016-12-09
      相关资源
      最近更新 更多