PHP声称$db是未定义的,但它是定义的


PHP is claiming $db is undefinded but it is defined

我有全局设置在我的脚本,但每当我运行它,它告诉我$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;
    }
}

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

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

和调用:

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

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

您的global应该在您的函数中有可用的连接

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

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

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

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

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

还要看一下lambda函数的闭包,在你的例子中,它是一个db,我认为你想让它全局但闭包在大多数情况下是一个更干净的解决方案

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