2009-06-06 7 views
2

PHPを学ぶだけで、mysql_queryの理解に問題があります。私の理解は、mysql_queryは、レコードが見つからない場合にFALSEを返すと仮定しています。しかし、 "FOUND!"が原因で常にtrueを返しているようです。常に結果です:PHP mysql_queryがfalseを返さない

$q = "SELECT * FROM users WHERE username = 'doesnotexist'"; 

$r = mysql_query($q); 

if (!$q) { 
    echo "<p>NOT FOUND!</p>"; 
} else { 
    echo "<p>FOUND!</p>"; 
} 

mysql_close(); 

あらかじめご了承ください。あなたが代わりに '$ rの' 変数(mysqlの結果)

答えて

13

mysql_queryは、エラーがある場合はfalseを返し、結果が見つからない場合はfalseを返します。ドキュメントから:SELECTについては

、SHOW、DESCRIBE 結果セットを返す およびその他のステートメントをEXPLAIN、mysql_query() エラーの 成功した場合に、リソース、またはFALSEを返します。 SQL文、 INSERT、UPDATE、DELETE、DROP、他のタイプのために

など、成功 した場合にTRUE、エラー時にFALSE mysql_query()戻ります。

mysql_query()も失敗し、 ユーザーがテーブルにアクセスするための 許可(s)は、クエリによって参照 を持っていない場合はFALSEを返します。

クエリによって返された結果があるかどうかを確認する場合は、mysql_num_rows()を使用してください。 REPLACE、DELETE、INSERTによって の影響を受けた行数を知る 多くの行が にSELECT ステートメントまたはmysql_affected_rows()のために戻されたかを知るために

使用mysql_num_rows()、または UPDATE文:マニュアルを参照してください。

3

あなたの 'if (!$q)は' 私が考える 'if (!$r)' でなければなりません。

0

の変数 '$ qを'(SQL文)をチェックしている

2
if (empty($r)) { 
     echo "<p>NOT FOUND!</p>"; 
} else { 
     echo "<p>FOUND!</p>"; 
} 

次のものが空であると考えられている:

"" (an empty string) 
0 (0 as an integer) 
"0" (0 as a string) 
NULL 
FALSE 
array() (an empty array) 
var $var; (a variable declared, but without a value in a class) 
0

そのdosen'tの仕事ならば、これを試してみてください。

<?php 
$q = "SELECT * FROM users WHERE username = 'doesnotexist'"; 
$r = mysql_query($q); 
if (!mysql_num_rows($r) >= 1) { 
     echo "<p>NOT FOUND!</p>"; 
} else { 
     echo "<p>FOUND!</p>"; 
} 
mysql_close(); 
?> 
1

[OK]を私は答えを出してきましたこの。

これは、レコードが有効かどうかを示すデータベースを更新するためのバージョンです。

$updatequery = "update `mydb` set `userid` = '$arr[0]', `name` = '$arr[1]' where `age` = '$arr[2]'"; 

$updatequeryresult= mysql_query($updatequery); 

$howmanyupdatedrecords = mysql_affected_rows(); 

if ($howmanyupdatedrecords == 0) { 
echo("The update didn't update any records as no one matched an age of " .$arr[2]"); 
} 

年齢はメッセージがあなたに存在しない年齢を示す表示されますDBに存在しない場合、これは、指定した年齢とすべての人々を更新DBを反復します。また、mysqlクエリがレコードにマッチする場合でも、データがすでに更新されているものと一致する場合、レコードを更新しません。これにより、一致した人がいるにもかかわらず、スクリプトは「年齢に合った人はいません」と返すようになります。それはmysqlのバグにしか帰結できません。私はMySQLに、私がそれを言ったように気にしないために、なぜそれがそれを取るべきかわからない情報を更新するように言った。 ;)

関連する問題