2010-11-26 13 views
54

私は、クエリで結果が返されたかどうかをチェックして確認する最良の方法を探しています。私はコードのこの部分をたくさん書いているように感じることがあります。時にはエラーが出ることもあります。MySQLの結果がPHPで返されるかどうかを確認する最良の方法?

たとえば、このクエリを実行して、新しい名前をデータベースに挿入する前にユーザー名が存在するかどうかを確認します。

$result = mysql_query("SELECT * FROM ..."); 

次に、結果が返されたかどうかを確認したいと思います。ここで私はそれを行う一つの方法は次のとおりです。

if (!$result) { PERFORM ACTION } 

最初の方法が機能しない場合は、時々この意志:

if (mysql_num_rows($result)==0) { PERFORM ACTION } 

その後、私も先日、このようにそれを行うことができることを見ました:

list($total) = mysql_fetch_row($result); 
if ($total==0) { PERFORM ACTION } 

これを行うにはどのような方法が最適ですか?

+0

この例では、のは、クエリがエラーを生成されていないと仮定してみましょう。 – timroman

+0

クエリにエラーがない場合、最初のテストは無意味です。 SELECT COUNT(\ *)や他の集約関数がある場合にのみ、最後の「SELECT \ *」が有効な場合は2番目の方法が最適です。しかし、喜んでください、PDOを使用してください:-) – Rahly

答えて

106
if (mysql_num_rows($result)==0) { PERFORM ACTION } 

これは私の投票を得ます。クエリを想定し

OPは任意のエラーが返されていないので、これは仕方

+0

なぜこれが投票されたのでしょうか? – benhowdle89

+4

@ benhowdle89 - sqlが失敗した場合、$ resultは有効なmysql結果リソースではありませんが、mysql_num_rowsは何ができますか? – ajreal

+3

本当ですが、投票する価値はほとんどありませんでした。 O/Pの質問をチェックするにはまだ有効な方法です。クエリで結果が返されたかどうかを確認して確認する最善の方法を探しています。 – benhowdle89

8

これを行う1つの方法は、mysql_num_rowsが返すものを確認することです。最小限の完全な例は次のようになります:

if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) { 
    // there are results in $result 
} else { 
    // no results 
} 

しかし、それはあなたがmysql_queryの戻り値をチェックし、それが(エラーによって引き起こされるであろう)falseだ場合にはそれを適切に取り扱うことをお勧めします。おそらくmysql_errorも呼び出してどこかにエラーを記録することによって可能性があります。

+0

[コンテンツのためにupvotedが、これを言及したかった。]マイナースタイルのニット:私は "=" ifの中に見て嫌い。 "=="と似ています。 * if *の前に代入*をすれば読みやすくなります。 (私は自分のキャリアで他の人のコードをデバッグするのに多くの時間を費やしています...) – ToolmakerSteve

1

、SELECT、SHOWの」のでmysql_fetch_rowでいずれかを使用しDESCRIBE、EXPLAINおよび結果セット、するmysql_query()のリターンを返す他の文のいずれかでなければなりませんすべての成功にリソース、エラー時にFALSE。

SQL文、INSERT、UPDATE、DELETE、DROP、など、するmysql_query()の他のタイプの場合は、エラー時に成功またはFALSEにTRUEを返します。 "

+1

mysql_fetch_rowは結果をフェッチしません。彼は、SELECTを考慮して、結果が返されるかどうかを知ることを求めています。 – Shoe

2

上記のオプションは私が使用するでしょう

mysql_errorがとても効果的に発生した場合、エラーはあなたがして、重複するユーザー名を入力することができます発生した場合

if (!$result) { PERFORM ACTION } 

の下にこれは本当だろうのような結果と照合

if (mysql_num_rows($result)==0) { PERFORM ACTION }

...

0

通常、私は===triple equals)と__LINE__,__CLASS__を使用して、私のコードでエラーを見つけます。

-2
if (mysql_num_rows($result)>0) { PERFORM ACTION } 
if ($result) { PERFORM ACTION } 
+3

あなたは本当に2年後に新しい質問を追加しているわけではありません! –

+0

さらに悪いことに、これは、もしそれ以外の場合は何かを行うための恐ろしい方法です。これはおそらく、意図されたものではない両方の動作を実行するでしょう。この答えは壊れています。 – ToolmakerSteve

4

データを取得するためにクエリを実行するたびに、オブジェクトとして返されます。それから、私たちの多くは、行を簡単にループするためにそれを配列に変換します。 phpの "empty()"関数は、配列が空であるかどうかをチェックするために使用されます。その中にデータがない場合。だから我々は、クエリの返される配列の表現は、処理前に、結果変数の型をテストするより論理的である何この

if(!empty($result)){ 
      //DO STUFF 
} 
+2

これを詳しく説明してください。 – Stunner

+0

いいえ、「空」は使用しないでください。他のstackoverflowの投稿の多くは、値が '0'または '0'であるときに間違いを引き起こすことについて話しています。* phpではfalse *と同じです。あなたは、$結果が特に、同じではなく、 'false'であることをテストする必要があります。重要:同じ理由で間違っても 'if(result!= false)'になります。正しいコードは 'if($ result!== false)'です。 – ToolmakerSteve

3

ようにすることによって、空でないかどうかを確認することができますか? "boolean"または "resource"のいずれかです。 mysqli_num_rowsでパラメータにbooleanを使用すると、関数がリソースを必要とするため警告が生成されます。

$result = mysqli_query($dbs, $sql); 

if(gettype($result)=='boolean'){ // test for boolean 
    if($result){ // returned TRUE, e.g. in case of a DELETE sql 
     echo "SQL succeeded"; 
    } else { // returned FALSE 
     echo "Error: " . mysqli_error($dbs); 
    } 
} else { // must be a resource 
    if(mysqli_num_rows($result)){ 

     // process the data  

    } 
    mysqli_free_result($result); 
} 
+2

有効な、クリアなオ​​プションとしてUpvoted。実際には、単純なコードでも同じ結果が得られます: 'if($ result === false)'。注記:これは '==='ではなく、 '=='でなければなりません。これは、あなたが "真偽値"に対してのみテストしていることを保証します。反対のテストは 'if($ result!== false)'です。 – ToolmakerSteve

-1
if (mysql_num_rows($result)!=0) { PERFORM ACTION } 

結果が肯定的であるかどうかをチェックし、行動する。この方法で、他の方法(== 0)あなたがアクションを実行し(あなたのクエリに一致するあなたのDBのレコードを持っている)ときなし結果は与えられた。

+0

OPは、ほぼ確実に彼らが意味していたことを言いました - 彼らは3つのバリエーションを与えました。 – ToolmakerSteve

0
$result = $mysqli->query($query); 
if($result){ 
    perform action 
} 

これはあなたがまだ$resultが無効である場合にアクションを実行したい場合、私はそれを行う方法、あなたも

0

...ダイで他にあっ投げる可能性がある:

if(!mysql_num_rows($result)) 
    // Do stuff 

0falseがあり、失敗した場合はmysql_num_rows()が返されます。

0

mysqli_fetch_array()は、行がない場合はNULLを返します。手続き的なスタイルで

:オブジェクト指向型で

if (! $row = mysqli_fetch_array($result)) { 
    ... no result ... 
} 
else { 
    ... get the first result in $row ... 
} 

if (! $row = $result->fetch_array()) { 
    ... 
} 
else { 
    ... get the first result in $row ... 
} 
関連する問題