无法解决PHP错误消息

时间:2013-04-21 11:07:49

标签: php

任何人都可以帮我解决以下错误。我正在为我的网站制作注册和登录功能。我把它连接到我的本地数据库,在那里我创建了一个用户。当我测试我可以登录并且识别出用户名和密码时,它会按预期工作。但是我得到了这个错误

Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 17 in C:\xampp\htdocs\LoginAndRegistration\core\functions\users.php on line 34

这就是我在第34行的内容

return (mysql_result(mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? true : false;

以下功能的一部分

function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    return (mysql_result(mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? true : false;
}

我已经盯着它看了好几年了,但似乎无法弄清楚问题。谁能告诉我我做错了什么? 感谢

6 个答案:

答案 0 :(得分:1)

此错误表示查询失败。始终检查查询是否成功:

$q = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'");
if ($q) {
    if ($rows = mysql_num_rows($q)) {
        // Continue operation, or set a flag
    } else {
        // No matching rows, throw an Exception or set a flag
    }
} else {
    // Something is wrong
    die(mysql_error());
}

答案 1 :(得分:1)

这行代码看起来像你要检查的用户名和密码是否存在。您需要将代码更改为:

return (mysql_result(mysql_query("SELECT COUNT(id) FROM users WHERE username = '$username' AND password = '$password'"), 0) == 1) ? true : false;

同时将(id)更改为您的列名称。

答案 2 :(得分:0)

您的错误可能来自查询根本没有返回任何结果的事实,因为没有任何匹配的用户名和密码。

我真的不会把那么多功能塞进彼此。它看起来过于复杂,它没有留下任何空间来添加错误处理(比如处理在您的情况下应该发生的情况),并且它会弄乱PHP的错误报告,因为发生的任何错误都将在同一代码行上。< / p>

将内容分成多行。对于任何读取代码的人来说,增强调试活动都会使事情更加清晰,并且由于线路长度较短,这通常是个好主意。

答案 3 :(得分:0)

您收到警告(不是错误),因为 mysql_query 有时候,它不会返回任何行,因此尝试使用 mysql_result 获取第一行当没有行时,会发出警告。

您可以尝试:

function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    $query = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'");
    if (mysql_num_rows($query) > 0)
        return true;
    else
        return false;
}

答案 4 :(得分:0)

除了折旧参数,请使用mysql_num_rows而不是mysql_result。

function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    return (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'")) == 1) ? true : false;
}

答案 5 :(得分:0)

试试这个

    function login($username, $password) {
$user_id = user_id_from_username($username);

$username = sanitize($username);
$password = md5($password);
$query = mysql_query("SELECT * FROM users WHERE username = '$username' AND password = '$password'") ;
if (mysql_num_rows($query) > 0 ) {

    $data = true ;
}else {

    $data = false ;
}
return $data ;
}