如何在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语句结果是不是有值?的主要内容,如果未能解决你的问题,请参考以下文章