2009-07-24 11 views
11

私はmysql_query()が結果を返したかどうかを確認する適切な方法はありますか?

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' 
            AND password = '$_CLEAN[password]'"; 
$result = mysql_query($query); 

if ($result) 
{ ... 

最も直感的なアプローチのように思えたものを試みたが、mysql_queryが0行が返された場合でも、真の値を返すため、それは動作しませんでした。 基本的には、行が返された場合に限り、その条件でロジックを実行します。

+0

'$ _CLEAN'の使用は、コード内で非常に疑わしいと思われます。これは悪い考えである理由をここで見てください:http://stackoverflow.com/questions/6164522/will-this-code-actually-work-against-sql-injection – Johan

答えて

22

使用mysql_num_rows

if (mysql_num_rows($result)) { 
    //do stuff 
} 
+1

大きなセットの場合、この関数はmysql_fetch_arrayを使うよりも効率が悪く、しかしここでそれは確かにうまく見えます。 – Smandoli

7

あなたは正確に一つの行をチェックしている場合:

if ($Row = mysql_fetch_object($result)) { 
    // do stuff 
} 

あなたが代わりにmysql_fetch_array()、または何を使用することができますが、原理は同じです。 1つ以上の行を期待している場合:

while ($Row = mysql_fetch_object($result)) { 
    // do stuff 
} 

これは、行がなくなるまでループします。私がするmysql_queryから返された結果に非常に特異的であることを得るため

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' 
            AND password = '$_CLEAN[password]'"; 
$result = mysql_query($query); 
$result = mysql_fetch_array($result); 

//you could then define your variables like: 
$username = $result['username']; 
$password = $result['password']; 

if ($result) 
{ ... 

私はそれが好き:この方法については何

2

-Ivanノバク

1

も... definitonのするmysql_queryによって

するmysql_query()は 成功した場合にリソースを返し、エラー時にFALSE。

が、何を理解する必要があり、この関数はFALSEとは異なる値を返す場合、クエリは問題なく走ってきたです(など、正しい構文、まだ生きて接続します。)しかし、このdoesntのは、あなたのクエリには、いくつかの行を返す意味。これで、次の

..あなたがFALSE取得する場合ので、あなたは何が起こったのかを知ること

mysql_errorno()mysql_error()を使用することができます

<?php 

$result = mysql_query("SELECT * FROM a WHERE 1 = 0"); 

print_r($result); // => true 

?> 

例えば

あなたはは、mysql_fetch_arrayを使用することができます()を使用して行から行を取得する

6

mysql_num_rows

結果セットから行数を取得します。このコマンドは、実際の結果セットを返すSELECTやSHOWのような文でのみ有効です。

一致しない場合、ゼロが戻り値になり、事実上FALSEになります。

$result = mysql_query($query); 

if(mysql_num_rows($result)) 
{ //-- non-empty rows found fitting your SQL query 

    while($row = mysql_fetch_array($result)) 
    {//-- loop through the rows, 
    //-- each time resetting an array, $row, with the values 

    } 
} 

データベースを引き出しても問題ありません。あなたが...変更したり、データベースから行を削除し、それによって影響を受けたどのように多くを知りたい場合は

は、INSERT、UPDATEによって影響を受けた行数を取得REPLACEまたはDELETEクエリ、 mysql_affected_rows()を使用します。クエリが失敗した場合

$result = mysql_query($query); 

if(mysql_affected_rows()) 
{ //-- database has been changed 

} 

//-- if you want to know how many rows were affected: 
echo 'Rows affected by last SQL query: ' .mysql_affected_rows(); 

mysql_query()FALSEを返します。行がなくてもデータベースを正常に照会しても、TRUEが返されます。

+0

良い説明があります! – jolt

3

私は次のように使用:

($結果= 0 & &はmysql_num_rows($結果)!)場合は{

クエリは、それはブール結果になり何も返さないし、それは値が0になるなら。

だから、あなたはそれがゼロかではありませんし、そうでない場合ならば、我々は何かがそこにあります知っているチェック...

何がそこに存在しない場合でもしかし、時にはそれがそう、1を返しますあなたはそれをチェックします行があり、そこに完全な行がある場合は、結果が返されたことを確認します。

5
$sql = "SELECT columns FROM table"; 
$results = mysql_query($sql, $conn); 
$nResults = mysql_num_rows($results); 
if ($nResults > 0) { 
    //Hurray 
} else { 
    //Nah 
} 

これは動作するはずです。

+0

が機能していない$ resultが偽になっています –

0
$result = mysql_query(...); 

if(false !== $result) 
{ 
    //... 
} 
+0

['mysql_query()'](http://php.net/manual/en/function.mysql-query.php)はエラーのときにのみ偽を返します。空の結果の場合、空のリソースを返します。あなたのコードは動作しません。ちなみに、これは 'if($ result)'と同じです。 –

関連する問題