MySQL计数功能不能正常工作


MySQL Count function not working right

$req_user = trim($_GET['user']);
    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");
$get_data = "SELECT * FROM `users` WHERE uname = '$req_user'";
$result = mysql_query($get_data) OR die(mysql_error());
$rows = mysql_fetch_assoc($result);
$email = $rows['email'];
$gravatar = md5(strtolower(trim("$email")));
$user_likes = mysql_query("SELECT COUNT(*) FROM likes WHERE username = '$email'");

我正试图计算数据库likes中当前用户的电子邮件在其username字段中的所有行。
(这是一个循环,从userinfo.php?user=xxx等链接获取信息。)
当我返回$user_likes时,没有输出。

代码有什么问题?
http://www.tutorialspoint.com/mysql/mysql-count-function.htm

假设$gravatar = md5(strtolower(trim("$email")));与这里的问题无关,也不需要,您还可以使用对数据库的一次查询来获得计数:

$req_user = trim($_GET['user']);
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name") or die("cannot select DB");
$get_count_query = 
    "SELECT COUNT(*)
     FROM likes 
     WHERE username = 
           ( SELECT email
             FROM users 
             WHERE uname = '$req_user'
           )
    ";
$result = mysql_query($get_count_query) or die(mysql_error());
$row = mysql_fetch_row($result);
$user_likes = $row[0];

你没有取…

这样做:

$result = mysql_query("SELECT COUNT(*) FROM likes WHERE username = '$email'");
$user_likes = mysql_fetch_row($result);

首先你需要正确地比较邮件(不区分大小写):

"... WHERE UPPER(username) = '" . strtoupper($email) . "'"

那么$user_likes是一个资源变量,它不会直接给你计数

你需要先获取它:

$row = mysql_fetch_row($user_likes);
echo 'Count: ' . $row[0]; 

你应该这么做:

$req_user = trim($_GET['user']);
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name") or die("cannot select DB");
$get_data = "SELECT * FROM `users` WHERE uname = '$req_user'";
$result = mysql_query($get_data) or die(mysql_error());
if ($rows = mysql_fetch_assoc($result)) {
    $email = $rows['email'];
    $gravatar = md5(strtolower(trim("$email")));
    $get_data = "SELECT COUNT(*) FROM likes WHERE username = '$email'";
    $user_likes = mysql_query($get_data) or die(mysql_error());
    if ($row = mysql_fetch_row($user_likes)) {
       $nbr = 1*$row[0]; 
    } else {
       // it could never happen ;-)
       $nbr = 0;
    }
} else {
    // no match with this user!
    $nbr = 0;
}
echo "This user likes $nbr times !";