使用PDO时“注意:未定义的变量:db”

时间:2013-04-16 06:22:13

标签: php mysql function pdo

在我学习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);

3 个答案:

答案 0 :(得分:3)

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

function GetCategory($db) {
    ...
}

或将其声明为全局变量:

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

通常更喜欢参数。

答案 1 :(得分:1)

$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 />";
    }
}

并阅读variable scope

答案 2 :(得分:0)

在函数内部使$ db全局化。

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

如果之前已经定义了......