Php $dbh在设置时不是可识别的变量?

Php $dbh在设置时不是可识别的变量?,php,pdo,Php,Pdo,我得到了以下信息: 注意:第12行/var/www/PDO/Functions/PDOFunctions.php中的未定义变量:dbh致命错误:在第12行/var/www/PDO/Functions/PDOFunctions.php中的非对象上调用成员函数prepare() 我的代码有什么问题?如果不一次性声明一个全局变量,那么它在所有函数中都可用 在需要访问全局变量的每个函数中声明全局变量 请参见中使用global的示例。如果不一次性声明变量global,那么它在所有函数中都可用 在需要访问全

我得到了以下信息:

注意:第12行/var/www/PDO/Functions/PDOFunctions.php中的未定义变量:dbh致命错误:在第12行/var/www/PDO/Functions/PDOFunctions.php中的非对象上调用成员函数prepare()


我的代码有什么问题?

如果不一次性声明一个全局变量,那么它在所有函数中都可用

在需要访问全局变量的每个函数中声明全局变量


请参见

中使用
global
的示例。如果不一次性声明变量global,那么它在所有函数中都可用

在需要访问全局变量的每个函数中声明全局变量


参见PHP中使用
global
的示例,要访问函数中的全局变量,必须使用global关键字声明它属于全局范围

function PDOFetch($Var)
{
    global $dbh;
    $sth = $dbh->prepare("$Var"); //Error Line
    $sth->execute();
    $result = $sth->fetchAll();
    return $result; 
}
函数中使用的所有变量都是该函数的局部变量,除非声明从全局范围导入


注意错误是一个有用的警告,表明您可能正在做一些出乎意料的事情。

在PHP中,要访问函数中的全局变量,必须使用global关键字声明它属于全局范围

function PDOFetch($Var)
{
    global $dbh;
    $sth = $dbh->prepare("$Var"); //Error Line
    $sth->execute();
    $result = $sth->fetchAll();
    return $result; 
}
函数中使用的所有变量都是该函数的局部变量,除非声明从全局范围导入


注意错误是一个有用的警告,提示您可能正在做一些您没有预料到的事情。

使用全局变量是不好的做法。对于这样简单的事情,您可以将代码重写为一个简单的类。通过这样做,您还可以轻松创建和使用多个数据库句柄

class Db 
{
    private $dbh = null;

    public function __construct()
    {
        $this->dbh = new PDO('mysql:host=localhost;dbname=pdo', 'root', 'xxxxxxxxxxx');
    }

    public function PDOFetch($Var)
    {
        $sth = $this->dbh->prepare("$Var"); //Error Line
        $sth->execute();
        $result = $sth->fetchAll();
        return $result; 
    }

    public function PDONumb ($Var)
    {
        $sth = $this->dbh->prepare("{$Var}");
        $sth->execute();
        $count = $sth->rowCount();
        return $count;
    }
    // Other methods here
}
然后是:

$dbc1 = new Db();
$dbc2 = new Db();  // Hey I have 2 connections now, cool
$result1 = $dbc1->PDOFetch(..);
$result2 = $dbc2->PDOFetch(..);

请注意,您的PDONUB已损坏,无法工作,因此我也对此进行了修复。

使用全局变量是一种糟糕的做法。对于这样简单的事情,您可以将代码重写为一个简单的类。通过这样做,您还可以轻松创建和使用多个数据库句柄

class Db 
{
    private $dbh = null;

    public function __construct()
    {
        $this->dbh = new PDO('mysql:host=localhost;dbname=pdo', 'root', 'xxxxxxxxxxx');
    }

    public function PDOFetch($Var)
    {
        $sth = $this->dbh->prepare("$Var"); //Error Line
        $sth->execute();
        $result = $sth->fetchAll();
        return $result; 
    }

    public function PDONumb ($Var)
    {
        $sth = $this->dbh->prepare("{$Var}");
        $sth->execute();
        $count = $sth->rowCount();
        return $count;
    }
    // Other methods here
}
然后是:

$dbc1 = new Db();
$dbc2 = new Db();  // Hey I have 2 connections now, cool
$result1 = $dbc1->PDOFetch(..);
$result2 = $dbc2->PDOFetch(..);

请注意,您的PDONUB已损坏且无法工作,因此我也对此进行了修复。

global$dbh
包含在函数中。请看我的简单示例。问题是您不知道
global
如何工作。在询问有关堆栈溢出的问题之前,您应该在谷歌上搜索并阅读文档…
global$dbh
包含在函数中。看看我的简单示例。问题是您不知道
global
是如何工作的。在询问有关堆栈溢出的问题之前,您应该用谷歌搜索此问题并阅读文档…修复了此问题,计时器允许时将在10分钟内标记为答案:)谢谢修复了此问题,计时器允许时将在10分钟内标记为答案:)谢谢将此应用到我的系统中!谢谢你!是的,我只是简单地回顾了一下:)我将研究如何将其应用到我的系统中!谢谢你!是的,我只是在回顾这一点:)