php mysql_fetch_assoc未按预期工作

时间:2012-02-10 05:52:30

标签: php mysql

您好我在这里有以下PHP代码:

    $username = trim(mysql_real_escape_string($username));
    $password = md5(trim(mysql_real_escape_string($password)));
    $query = "SELECT user_level FROM user WHERE username='$username' AND password='$password'";
    $result = mysql_query($query) or die('query did not go through');
    if($result!=false){
        echo 'result is not false!<br/>';
        while($row = mysql_fetch_assoc($result)){
        echo 'another output to test'.$row['user_level'].'<br/>';
        }
    }

我知道数据库条目存在..它应该是'1'但由于某种原因它不输出1.我错过了一些非常小的东西,我现在无法捕捉到这一点吗?

编辑:确定我已将用户名更改为user_level,但它没有得到任何内容。 while循环中的echo甚至不输出任何内容。

edit2:我也忘记提及当我输出$ result时它说资源ID#5所以我知道它从查询中得到了一些东西。

编辑3:(2/10/2012):只是为了让你们知道,获取用户名是错误的,我的意思是从用户表中的用户那里得到user_level。

查询的输出是: 查询是此值SELECT user_level FROM user WHERE username ='spankerer'AND password ='246b8ae01899a116369ddcba84f425fd'

的print_r($行);没有在while循环中显示。

编辑4:忘了提一下如果我从cmd做mysql查询,我得到user_level表,显示1是正确的。

4 个答案:

答案 0 :(得分:3)

您的选择查询应该像

$query = "SELECT user_level, username FROM user WHERE username='$username' AND password='$password'";

修改

将您的查询也回复为:

 $query = "SELECT user_level, username FROM user WHERE username='$username' AND password='$password'";
echo $query;

在数据库中运行相同的查询,看看它是否为您提供了什么? 同样在while循环中首先做

 while($row = mysql_fetch_assoc($result)){
   print_r($row);
    }

并查看与直接查询执行相同的输出。

答案 1 :(得分:1)

您的查询应该只查询user_level:

$query = "SELECT user_level FROM user WHERE username='$username' AND password='$password'";

修改

如果你改变你的while循环,它会起作用吗?

while($row = mysql_fetch_assoc($result)){
    echo 'another output to test'.$row['user_level'].'<br/>';
}

while($row = mysql_fetch_array($result)){
    echo 'another output to test'.$row['user_level'].'<br/>';
}

答案 2 :(得分:1)

在select参数中,您需要获取名为“user_level”的列。查询中缺少该列。

答案 3 :(得分:0)

所以它似乎是我的数据库问题......

我将密码的最大字符数设置为20,当用户输入密码时,PHP会将其哈希并尝试将32字符键与数据库的20个字符键匹配。