任何人都可以帮我解决以下错误。我正在为我的网站制作注册和登录功能。我把它连接到我的本地数据库,在那里我创建了一个用户。当我测试我可以登录并且识别出用户名和密码时,它会按预期工作。但是我得到了这个错误
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;
}
我已经盯着它看了好几年了,但似乎无法弄清楚问题。谁能告诉我我做错了什么? 感谢
答案 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 ;
}