如何在php中检查mysql select语句结果是不是有值?

Posted

技术标签:

【中文标题】如何在php中检查mysql select语句结果是不是有值?【英文标题】: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";

【问题讨论】:

【参考方案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";

【讨论】:

以上是关于如何在php中检查mysql select语句结果是不是有值?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询缓存

如何在显示列之前检查 SELECT 语句是不是存在

MySQL/PHP 输出数组重复查询然后显示结果,如何删除查询? [复制]

在 plpgsql 函数中访问 select 语句结果

PHP之路——MySql查询语句

13MySQL-查询缓存Query Cache