【问题标题】:How to check whether a mysql select statement result has a value or not in php?如何在php中检查mysql select语句结果是否有值?
【发布时间】:2011-02-17 03:22:57
【问题描述】:

我有一个文本框UserName 和一个Check Availability 按钮旁边......我通过传递UserName 文本框值检查了可用性......但它似乎不起作用。 ...

这是我在做什么?

echo $UserName = $_GET['CheckUsername'];
$_SESSION['state'] = $State;
$queryres = "SELECT dUser_name FROM tbl_login WHERE dUser_name='$UserName'";
$result = mysql_query($queryres,$cn) or die("Selection Query Failed !!!");

if($result==true) // this condition doesn't seem to work
    {
       echo "User Name Available";
    }
else
{
        echo "Sorry user name taken";
}

【问题讨论】:

    标签: php mysql select if-statement


    【解决方案1】:

    请确保您正在转义 MySQL 的输入。直接从$_GET$_POST 或任何其他超全局变量传递数据是不安全的。

    // Escape any quote characters in the input
    $UserName = mysql_real_escape_string($_GET['CheckUsername'], $cn);
    $_SESSION['state'] = $State;
    
    $queryres = "SELECT dUser_name FROM tbl_login WHERE dUser_name='$UserName' LIMIT 1";
    $result = mysql_query($queryres, $cn) or die("Selection Query Failed !!!");
    
    if (mysql_num_rows($result) > 0) {
        echo 'User name exists in the table.';
    } else {
        echo 'User name does not exist in the table.';
    }
    

    【讨论】:

    • 为什么不在其中添加一个 trim() :)
    【解决方案2】:
    if ($result == false)
    {
          echo "not available";
    }
    else
    {
          echo "available";
    }
    

    你的不起作用的原因是因为 $result 的值不会是真的,因为它包含一个数组。您可以通过反转语句首先检查是否为 false 来做到这一点。

    你也可以用 mysql_num_rows 来做

    if (mysql_num_rows($queryres) > 0)
    {
         echo "User name taken";
    }
    

    【讨论】:

    • Warning: Wrong parameter count for mysql_num_rows()
    • 如果 ($result === false) 会更精确吗?
    【解决方案3】:

    来自http://php.net/mysql_query

    返回值

    对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

    因此,首先,您的 if 语句永远不会评估为 false,因为您在 mysql_query 上有“或死”(当 mysql_query 返回 false 时激活)。

    但是您的 if 条件完全错误,因为您不想知道查询是否失败,而是想知道是否返回了任何结果。为此,您可能需要使用 mysql_num_rows。

    作为一个小提示,由于您只需要知道是否有 1 个匹配的用户名,因此请在查询末尾添加“LIMIT 1”。然后mysql会在遇到第一个匹配项时立即返回,而不是在整个表中搜索更多结果。

    作为替代方法,您可以使用 COUNT() 查询,并检查结果集中返回的数字。

    【讨论】:

    • 如果您要搜索的列是唯一的,我不确定LIMIT 1 是否必要。但我想这不会造成伤害,并且可能有助于养成习惯。
    【解决方案4】:

    虽然这个问题已经有了足够的答案,但我会给你另一种选择。只需删除 IF 条件中的“==true”,它将自动测试是否存在值而不是布尔比较。

    if($result) // this condition will now work
        {
           echo "User Name Available";
        }
    else
    {
            echo "Sorry user name taken";
    }
    

    如果您想保留代码的签名,可以使用它。

    【讨论】:

      【解决方案5】:

      在执行查询后,只需 mysql_num_rows($result) 将返回您的行数被获取。

      【讨论】:

        【解决方案6】:
        $queryres = "SELECT dUser_name FROM tbl_login WHERE dUser_name='$UserName'";
        $result = mysql_query($queryres,$cn) or die("Selection Query Failed !!!");
        if (mysql_num_rows($result))
        {
        echo "Username available";
        }
        else
        {
        echo "Username not available";
        }
        

        【讨论】:

          猜你喜欢
          • 2011-02-09
          • 2020-10-27
          • 1970-01-01
          • 1970-01-01
          • 2023-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多