微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – mysql_query()返回布尔值并导致mysql_fetch_assoc()失败

我正在为我的应用程序编写一个小的登录类,但是,我认为我的查询很糟糕,因为当我在查询结果上调用mysql_fetch_assoc()时,我收到此错误

Warning: MysqL_fetch_assoc() expects parameter 1 to be resource, boolean given

我很熟悉MysqL_fetch_assoc()是如何工作的,但我猜测对MysqL_query()的调用返回false,这显然是一个布尔值,产生错误.

这是查询

$loginsql = 'SELECT userid, username, password FROM users WHERE username=\'. $username .\' AND password=\'. $password .\'';

注意:我意识到在PHP中设置的“MysqL_”函数从5.5开始不推荐使用,但我使用的是5.3.8并且只是练习.我稍后将使用PDO重构该应用程序.

classes.PHP

<?PHP

class connectToDb {
    function dbConnect($config) {   
        $connection = MysqL_connect($config['host'], $config['dbuser'], $config['dbpass']);
        if ($connection) {
            MysqL_select_db($config['db'], $connection);
        } else {
            echo "Could not connect to database!";
        }
    }
}

class registeraccount {
    function doRegister($regusername, $regpassword, $regemail) {
        $regsql = "INSERT INTO users (username, password, email) VALUES ('$regusername', '$regpassword', '$regemail')";
        if (MysqL_query($regsql)) {
            echo "Successfully registered!";
        } else {
            echo "Problem with registration!";
        }
    }
}

class loginAccount {
    function doLogin($username, $password) {
        MysqL_real_escape_string($username);
        MysqL_real_escape_string($password);

        hash('sha256', $password);

        $loginsql = 'SELECT userid, username, password FROM users WHERE username=\'. $username .\' AND password=\'. $password .\'';

        $result = MysqL_query($loginsql) or die(MysqL_error());

        $loginrow = MysqL_fetch_assoc($result);
        if ($loginrow) {
            $_SESSION['username'] = $loginrow['username'];
            $_SESSION['userid'] = $loginrow['userid'];
        } else {
            echo "Incorrect username and/or password!";
        }
    }
}

解决方法:

如果出现错误,MysqL_query()将返回false.如果返回false,则可以使用MysqL_error()获取错误消息,该消息应该提示查询错误.

这就是你曾经看过很多这些样式查询的原因:

$result = MysqL_query('SELECT foo FROM bar') or die(MysqL_error());

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐