1

在学习 PDO 的过程中,我编写了以下代码:

$sql = 'SELECT * FROM category ORDER BY order_cat DESC';
foreach ($db->query($sql) as $row)
{
    echo "<input type='radio' name='category' value='$row[id]'>$row[name]<br />";
}

然后我将它封装成这样的函数:

function GetCategory()
{
    $sql = 'SELECT * FROM category ORDER BY order_cat DESC';
    foreach ($db->query($sql) as $row)
    {
        echo "<input type='radio' name='category' value='$row[id]'>$row[name]<br />";
    }
}

我这样称呼它:

echo GetCategory();

但是,当我这样做时,会出现以下错误:

注意:未定义变量:db
致命错误:调用query()非对象上的成员函数

我不知道我错过了什么;我$db在我的配置文件中声明如下:

$db = new PDO("mysql:host=$localhost;dbname=$namedb;charset=utf8", $userdb, $passdb);
4

3 回答 3

3

您要么需要$db作为参数传递给GetCategory

function GetCategory($db) {
    ...
}

或将其声明为全局变量:

function GetCategory($db) {
    global $db;
    ...
}

参数通常是优选的。

于 2013-04-16T06:25:35.977 回答
2

$db对象不存在于函数的上下文中。您应该将其作为附加参数传递给函数。

function GetCategory($db)
{
    $sql = 'SELECT * FROM category ORDER BY order_cat DESC';
    foreach ($db->query($sql) as $row)
    {
        echo "<input type='radio' name='category' value='$row[id]'>$row[name]<br />";
    }
}

并阅读变量范围

于 2013-04-16T06:23:53.693 回答
1

在函数内部时使 $db 成为全局变量。

function GetCategory()
{
global $db;
...
}

如果它之前已经定义过,当然......

于 2013-04-16T06:24:49.347 回答