PHP声称$ db未定义但已定义

时间:2013-06-06 10:08:00

标签: php

我的全局设置在我的脚本的顶部,但每当我运行它时,它告诉我$ db是未定义的。

global $db;
$db = '';
$db = new Database($dbname, $host, $dbusername, $dbpassword, 'utf8', true, "Database Error");

function tryLogin($username, $password)
{

    $row = $db->fetch_row("SELECT id, username, password, salt, email FROM users WHERE username = ?", true, array($username));

    if(genPassWithSalt($POST['password'], $row['salt']) === $row['password']) 
    { 
        return $row;    
    }
    else
    {
        return false;
    }
}

5 个答案:

答案 0 :(得分:8)

无法从函数内部访问变量$db;考虑将函数签名更改为:

function tryLogin($db, $username, $password)

致电:

tryLogin($db, 'hello', 'pwd');

除此之外,代码顶部的global $db;语句也可以删除,现在它没有做任何有用的事情。

答案 1 :(得分:4)

您的global应该在您的功能中,以便连接可用

function tryLogin($username, $password)
{
    global $db;

答案 2 :(得分:2)

您还需要将global $db;放入您的函数中。

答案 3 :(得分:0)

在PHP中,每个函数都有自己的variable scope。这意味着在函数内部定义的变量在函数内部不可用。您需要将其传递给函数或使其成为全局函数。

function tryLogin($username, $password, $db) 
{
    // code
}

function tryLogin($username, $password)
{
    global $db;
    // code
}

答案 4 :(得分:0)

还看一下lambda函数的闭包,就像在你的情况下它是一个db我认为你想让它全局但在大多数情况下闭包可以是一个更清洁的解决方案

$c = 'World';
$myfunction = function ($a,$b) use ($c) {
    echo "Hello, $c!\n";
};