0
<?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 />";
}
?>

値を抽出するために上記のコードを実行しています。ユーザー名が一致する場合は値が表示されますが、間違った入力テキストを指定すると、値のない「抽出」も表示されるのはなぜですか? 私を助けてください???

4

2 に答える 2

2

関数のPHPマニュアルエントリで説明されているようにmysql_query()

SELECT、SHOW、DESCRIBE、EXPLAIN、および結果セットを返すその他のステートメントの場合、mysql_query()は成功またはエラー時にリソースを返します。FALSE

したがって$result、変数は、username列に一致するかどうかに関係なく、MySQL リソースを保持します。このようなリソースを使用してテストすると、if常に評価されTRUEます (クエリ自体がエラーをスローしない限り)。

マニュアルは次のように説明しています。

mysql_fetch_array()返された結果リソースは、返されたデータにアクセスするために、 および結果テーブルを処理する他の関数に渡される必要があります。

mysql_num_rows()SELECT ステートメントに対して返された行の数を確認したりmysql_affected_rows()、DELETE、INSERT、REPLACE、または UPDATE ステートメントによって影響を受けた行の数を確認したりするために使用します。

あなたのケースではmysql_num_rows()、クエリによってレコードが返されたかどうか (つまり、WHERE条件が満たされたかどうか) を判断するために を使用してテストできます。

于 2012-08-25T12:03:33.120 に答える
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");
}
于 2012-08-25T12:08:56.530 に答える