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;
}
}
我知道这个确切的问题已经发布,但是 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;
}
}