mysql_num_rows不起作用,但它确实适用于另一个查询

时间:2013-03-07 14:40:29

标签: php mysql rows

我有两种获取球员用户名的方法,一种是在他们登录时,另一种是在他们使用电子邮件登录时。然而,当他们作为新玩家登录时,它会连接到Minecraft.net数据库并检查用户名/密码/电子邮件是否正确,如果是,它会将它们添加到我们的数据库而不需要密码。

但是我似乎无法使第二个MYSQL查询起作用,没有mysql错误或连接错误,但是当内部有一行时,行继续显示为0.

if (strpos($_POST['username'],'@') === false) {
                $username = $_POST['username'];
                $res = mysql_query("SELECT * FROM users WHERE user_email='$username'");
                $ign_exists_check = mysql_num_rows($res);
                $username_exists_check = 0;
                if(!$res) die ('Unable to run query1:'.mysql_error());
            }
            else {
                $username = $_POST['username'];
                $res2 = mysql_query("SELECT * FROM users WHERE user_name='$username'");
                $username_exists_check = mysql_num_rows($res2);
                $ign_exists_check = 0;
                if(!$res2) die ('Unable to run query1:'.mysql_error());
            }
            die($username_exists_check . $ign_exists_check);
            if ($usernamea_exists_check == 0 && $ign_exists_check == 0)
                {

2 个答案:

答案 0 :(得分:0)

你的逻辑似乎是颠倒的。

当用户名中没有@时,您正在查询user_email
您的代码中也有太多重复

if (strpos($_POST['username'],'@') === false) {
    $username = mysql_real_escape_string($_POST['username']);
    $sql = "SELECT * FROM users WHERE user_name='$username'"
    $username_exists_check = 1;
} else {
    $email = mysql_real_escape_string($_POST['username']);
    $sql = "SELECT * FROM users WHERE user_email='$email'"
    $username_exists_check = 0;
}
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
$user = mysql_fetch_array($res);
if ($user) {
    $ign_exists_check = !$username_exists_check;
} else {
    $ign_exists_check = $username_exists_check = 0;
}
var_dump($row,$username_exists_check,$ign_exists_check);

答案 1 :(得分:0)

如果你没有错误和0行,那么查询“工作”,它根本找不到符合条件的任何行。 你需要做的是回应查询:

echo "SELECT * FROM users WHERE user_name='$username'";

然后,您将准确地看到它正在搜索的内容。实际上,使用回显的查询并尝试使用类似phpMyAdmin的方式对数据库运行它。

但是,我注意到的一点是你的逻辑说,如果你没有在发布的用户名字段中找到@,那么在user_email列中查找用户名,如果有@,那么请在user_name字段。也许你的支票应该是:

if (strpos($_POST['username'],'@') !== false) {