1

我在脚本的最顶部有全局集,但是每当我运行它时,它都会告诉我 $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;
    }
}
4

5 回答 5

8

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

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

并致电:

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

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

于 2013-06-06T10:12:19.517 回答
4

global应该在你的函数中才能有可用的连接

function tryLogin($username, $password)
{
    global $db;
于 2013-06-06T10:09:46.980 回答
2

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

于 2013-06-06T10:09:32.120 回答
0

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

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

或者

function tryLogin($username, $password)
{
    global $db;
    // code
}
于 2013-06-06T10:11:40.000 回答
0

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

$c = 'World';
$myfunction = function ($a,$b) use ($c) {
    echo "Hello, $c!\n";
};
于 2013-06-06T10:19:40.643 回答