-3

我正在将我的网站转换为 PDO,在大约 200 个脚本之后,我已经接近尾声了。每个脚本都访问相同的函数脚本。在函数脚本中,我有一个如下所示的数据库类:

class Database {
    private $db_con = ''; //stores the connection

    public function db_login(){
        //log into the database
    }
    public function db_control($query, $params){
        //run the query
    }
}
//initiate the class and log in
$db = new Database();
$db->db_login();

这两个函数都可以正常工作,并且适用于每种类型的查询,因此我几乎完成了。但是,我遇到了一个问题。

我正在处理的脚本上有一个独立函数,该函数在脚本中多次使用。我通常运行 db_control:

$results = $db->db_control($query, $params);

但是从一个函数中运行它:

function func(){
    $results = $db->db_control($query, $params);
}

返回错误。

致命错误:在第 39 行调用 C:..php 中非对象上的成员函数 db_​​control()

我究竟做错了什么?删除此功能后,该类肯定会启动,因为脚本上的其他查询可以正常工作。如何从独立函数中访问 db_control()?

谢谢你,

4

4 回答 4

2

$db在功能范围内不可用,您可以

$db作为参数传递

function func($db, $query, $params){
    return $db->db_control($query, $params);
}
$results = func($db, $query, $params);

或者

function func($query, $params){
    global $db;
    return $db->db_control($query, $params);
}
$result = func($query, $params);

用于global使其在函数中可用,可能还有其他解决方案!

于 2012-12-18T11:47:31.897 回答
1

$db从函数内调用时超出范围。您可以$db作为参数传递给函数

function func($db){

还有一个非常糟糕的global方法:

function func(){
    global $db; // $db is now accessible
于 2012-12-18T11:47:15.907 回答
1

了解变量范围。该变量$db未在函数内部声明,因此它不存在于函数内部。你需要把它传入。

于 2012-12-18T11:47:22.740 回答
1

哦,您已将 $db 作为全局启动:/

您不想这样做的原因有很多,我不会在这里讨论,主要是因为我的时间有点短,我将等待纯粹主义者在下面发表评论。但快速解决方法是添加。

global $db

不是最理想的情况,但应该可以解决您的问题。

于 2012-12-18T11:50:07.410 回答