为什么总是在mysql上获得结果的正值?

时间:2012-08-25 11:57:03

标签: php mysql

<?php

$uname=$_POST['uname'];
$pwd=$_POST['pwd'];
$result="";
echo($uname.'</br>');
echo($pwd);
$con=mysql_connect("localhost","root","");
mysql_select_db("user_login_test",$con);
$sql="SELECT * FROM userlogin WHERE username='".$uname."'";
if($result=mysql_query($sql))
{
echo($result);
echo("Extracted<br>");
}
else
{
echo("NOT Extracted");
}
while($row = mysql_fetch_array($result))
{
    echo $row['username'] . " " . $row['password'];
    echo "<br />";
}
?>

我正在使用上面的代码来提取值。如果用户名匹配则显示值,但如果我输入错误的输入文本,它也会显示“已提取”但没有值为什么?请帮帮我???

2 个答案:

答案 0 :(得分:2)

正如mysql_query()函数的PHP手册条目中所述:

  

对于返回结果集的SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句, mysql_query()会在成功时返回resource,或 FALSE 出错了。

因此$result变量保留了MySQL资源,而不管username列是否匹配:使用if测试此类资源将始终评估为 {{ 1}} (除非查询本身引发错误)。

手册继续解释:

  

返回的结果资源应该传递给mysql_fetch_array(),以及其他用于处理结果表的函数,以访问返回的数据。

     

使用mysql_num_rows()查找为SELECT语句返回的行数,或使用mysql_affected_rows()查找DELETE,INSERT,REPLACE或UPDATE语句影响的行数。

在您的情况下,您可以使用TRUE进行测试,以确定查询是否返回了任何记录(即是否满足mysql_num_rows()条件。)

答案 1 :(得分:0)

您为提取用户名编写了错误的逻辑。 我修改了你的代码检查它。

$sql="SELECT * FROM userlogin WHERE username='".$uname."'";
$result=mysql_query($sql)
if(mysql_num_rows($result)>0)
{
echo("Extracted<br>");
}
else
{
echo("NOT Extracted");
}