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

ラムダ関数のクロージャーも見てください。あなたの場合はデータベースなので、グローバルにしたいと思いますが、ほとんどの場合、クロージャーはよりクリーンなソリューションになる可能性があります

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