我的PHP代码不起作用

时间:2013-05-10 00:40:26

标签: php mysql

我在php脚本中遇到问题,当我输入正确的用户名时,它回显“用户找到”和

我输入错误的用户名,它也回显“用户找到”。

这是我的代码请检查并让我知道,如果!$结果变量应该工作,但没有。为什么呢?

<?php
    echo "enter the username \n";
    $username = trim(fgets(STDIN));
    echo "enter the password\n";
    $password = trim(fgets(STDIN));

    //connecting to database
    $db = mysql_connect("localhost","sqldata","sqldata") or die(mysql_error());

    //selecting our database
    $db_select = mysql_select_db("accounts", $db) or die(mysql_error());

    $result= mysql_query("select * from login where username = '$username' ");
    if (!$result)
    {
        echo "error no user";
    }
    else
    {
        echo "user found";
    }

    mysql_close($db)
?>

4 个答案:

答案 0 :(得分:0)

mysql_query返回结果资源,除非MySQL查询中存在实际错误。这个结果绝对没有表明其中是否有任何行。

试试这个:

$result = mysql_fetch_assoc(mysql_query("select * from `login` where `username`='".mysql_real_escape_string($username)."'"));
if( !$result) echo "Error no user";
else echo "user found";

答案 1 :(得分:0)

避免使用mysql_*函数,因为它们已被弃用并将被删除。

要回答您的问题,原因是如果查询成功执行,mysql_query会返回结果对象。

您需要使用mysql_num_rows()来检查是否找到了用户。

$result = mysql_query("select * from login where username = '$username' ");

if(mysql_num_rows($result) == 0) {
    echo "error no user";
} else {
    echo "user found";
}

此外,您应该始终检查查询是否没有像这样失败:

if (!$result) {
    echo "Query failed!  Reason: " . mysql_error();
    exit;
}

答案 2 :(得分:0)

只要查询实际执行(即没有MySQL或查询错误)if(!result)将始终验证为true,即使找到0条记录。这是因为$result是MySQL结果集资源,而不是查询的直接值。

您需要检查返回的行数:

$result= mysql_query("select * from login where username = '$username' ");

if(!$result) {
    echo "MySQL error: " . mysql_error();
} else if (mysql_num_rows($result) === 0) {
    echo "User not found";
} else {
    echo "user found";
}

我还强烈建议您不要使用不再使用的mysql_*函数。也许请查看mysqliPDO

答案 3 :(得分:0)

即使没有匹配的行,你也会得到一个结果对象。您需要查看结果返回的行数;看看http://us1.php.net/manual/en/function.mysql-query.php

另外,我强烈建议您只要学习如何进行查询,请使用mysqli而不是mysql。它在各方面都更好。