Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么mysql上的结果总是正值?_Php_Mysql - Fatal编程技术网

Php 为什么mysql上的结果总是正值?

Php 为什么mysql上的结果总是正值?,php,mysql,Php,Mysql,我正在做上面的代码来提取值。如果用户名匹配,则显示值,但如果输入错误,则显示“已提取”且无值,为什么?请帮助我???如函数的PHP手册条目所述: 对于返回结果集的SELECT、SHOW、DESCRIBLE、EXPLAIN和其他语句,mysql\u query()在成功时返回一个值,或在出错时返回一个值 因此,您的$result变量会保存一个MySQL资源,而不管username列上是否有匹配项:使用if测试这样的资源将始终计算为TRUE(除非查询本身抛出错误) 手册接着解释: 返回的结果资源应传

我正在做上面的代码来提取值。如果用户名匹配,则显示值,但如果输入错误,则显示“已提取”且无值,为什么?请帮助我???

如函数的PHP手册条目所述:

对于返回结果集的SELECT、SHOW、DESCRIBLE、EXPLAIN和其他语句,mysql\u query()在成功时返回一个值,或在出错时返回一个值

因此,您的
$result
变量会保存一个MySQL资源,而不管
username
列上是否有匹配项:使用
if
测试这样的资源将始终计算为
TRUE
(除非查询本身抛出错误)

手册接着解释:

返回的结果资源应传递给和其他处理结果表的函数,以访问返回的数据

用于查找SELECT语句返回的行数,或查找DELETE、INSERT、REPLACE或UPDATE语句影响的行数


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

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

<?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 />";
}
?>
$sql=“从userlogin中选择*,其中username=”“$uname.”;
$result=mysql\u查询($sql)
如果(mysql_num_rows($result)>0)
{
回声(“提取的
”; } 其他的 { 回声(“未提取”); }
您的代码易受SQL注入攻击。您真的应该使用,将变量作为参数传递到其中,而这些参数不会对SQL进行计算。如果您不知道我在说什么,或者如何修复它,请阅读的故事。另外,正如PHP手册中关于
mysql\u*
函数的一章所述:不建议在编写新代码时使用此扩展。相反,应该使用或扩展名。在选择MySQL API时,请参阅以获取更多帮助。请阅读有关SQL注入的更多信息:那么我如何检查值是否被提取??我想显示。@user1611964:如上所述,您可以使用
if(mysql_num_rows($result))…
。如果您得到了答案,请您接受Harry的答案,只需单击复选标记(只需稍微高一点,在投票下方)或在此处阅读更多内容:
$sql="SELECT * FROM userlogin WHERE username='".$uname."'";
$result=mysql_query($sql)
if(mysql_num_rows($result)>0)
{
echo("Extracted<br>");
}
else
{
echo("NOT Extracted");
}