-2

当我输入正确的用户名时,我的 php 脚本中出现问题,它会回显“用户找到”以及何时

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

这是我的代码,请检查并告诉我,如果 !$result 变量应该工作但没有工作。为什么?。

<?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

4 回答 4

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";
于 2013-05-10T00:45:03.477 回答
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;
}
于 2013-05-10T00:45:10.640 回答
0

只要查询实际执行(即没有 MySQL 或查询错误) ,即使找到 0 条记录,if(!result)也会始终进行验证。true这是因为$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代替。

于 2013-05-10T00:45:16.413 回答
0

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

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

于 2013-05-10T00:46:05.620 回答