SQL Class 问题 - 在 null 上调用成员函数 - phpBB

SQL Class Issue - Call to a member function on null - phpBB

我知道这个确切的问题已经发布,但是 none 给我一个可行的答案。我有一个简单的 PHP 文件,其中包含另一个 php 文件来实例化一些 类,以便我可以连接到我的数据库。我收到错误 "Call a to member function sql_query() on null"。出现错误的行是 $result = $db->sql_query($sql);。我知道 include($phpbb_root_path . 'common.' . $phpEx); 有效。我已经完成 var_dump($db) 并且它不为空,并且我没有在此文件中的任何位置设置该变量,但是在 common.php 中 included.Here 是我的 php 文件:

PHP

<?php
//error reporting
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(E_ALL);

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

//handle ajax post data
if(isset($_POST['action']) && !empty($_POST['action'])) {
  $action = $_POST['action'];
  
  switch($action) {
   case 'get_vehicle_makes' :
    get_vehicle_makes();
    break;
   case 'get_vehicle_models' :
    get_vehicle_models();
    break;
   case 'test' :
    get_vehicle_years();
    break;
  }
 }

//The vehicle years list will always be the same regardless of make or model  - block_var = "vehicle_years"
 function get_vehicle_years()
 {
  $sql = 'SELECT DISTINCT year FROM phpbb_vehicles'; 
  var_dump($sql);
  $result = $db->sql_query($sql);
  
  $data = array();
  
  while($row = $db->sql_fetchrow($result))
  {
   $data = $row['year'];
  }
  
  $db->sql_freeresult($result);
  
  $myArray = array(1, 2, 3);
  echo ("good job");
  exit;
 }


?>

正如您在我的 PHP 顶部看到的那样,我包含了调试代码以显示我的 php 日志错误,但除了错误消息之外我什么也没得到。这不是显而易见的事情,是吗?

你应该将 $db 作为参数传递给函数,否则它不会在函数范围内,尽管你的全局函数适合车辆 class,然后你只需要传递 $db 实例一次。

例如:

<?php
//error reporting
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(E_ALL);

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

class vehicle {

    public function __construct($db)
    {
        $this->db = $db;
    }

    //The vehicle years list will always be the same regardless of make or model  - block_var = "vehicle_years"
    public function years()
    {
        $sql = 'SELECT DISTINCT year FROM phpbb_vehicles';  
        var_dump($sql);
        $result = $this->db->sql_query($sql);

        $data = array();

        while ($row = $this->db->sql_fetchrow($result)) {
            $data = $row['year'];
        }

        $this->db->sql_freeresult($result);

        $myArray = array(1, 2, 3);
        echo ("good job");
        exit;
    }

    //.. your other functions
}

//handle ajax post data
if (isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];

    $vehicle = new vehicle($db);

    switch($action) {
        case 'get_vehicle_makes' :
            $vehicle->makes();
            break;
        case 'get_vehicle_models' :
            $vehicle->models();
            break;
        case 'test' :
            $vehicle->years();
            break;
    }
}