2011-01-27 9 views
1

私はデータベースラッパークラスに取り組んできましたが、今度はサーバーがなくなります... MySQLの典型的なエラーメッセージ。私はデータベースへの再接続を扱うためのロジックをラップしており、それは動作しているようです。私に面白いのは、次のクエリです:LIMIT 1のMySQL SELECT *は結果にFALSEを返しますか?

SELECT id FROM pixel WHERE (id = 522574) AND (advertiser_entity_id = 45574) LIMIT 1 

PHPMYADMINでその行を実行すると、空のセットが生成されます。これをデータベースクラスを介して実行すると、falseが返されます。

誰でもこの動作を見ましたか? mysql_errornoやエラーメッセージは返っていません。

$result = mysql_query($query, $this->database_connection); 
if (false === $result) { 
// handle error here 
} 
else { return $result; } 
+1

mysql_queryなどの関数は結果がなくても常にMySQLの結果を返すので、データベースクラスで間違いを犯した可能性が非常に高いです。 – Lekensteyn

答えて

11

一致する行が見つからない場合はエラーにはなりません。 WHERE条件を満たすレコードが見つからない場合は、エラーではなく、空の結果を返します。独自のDBレイヤーを作成している場合は、エラーとして扱うべきではありません。クエリは正常に実行されました。一致するものが見つからなかっただけです。

なぜコードがfalseを返すのかを尋ねるのであれば、通常は言語がブール値コンテキストでゼロまたはnull値を "false"として扱うからです。

+1

ありがとうマイク。したがって、MySQLからの応答はブール値(FALSE)です。私はそれが空のセットを返す必要があると思った... mysql_queryのAPIドキュメントは、エラーの場合にのみfalseを返すと言います。さらに、自分のコードで質問を更新しました。 – Mike

+0

私はPHPをあまり使っていませんが、質問に対するあなたのコメントに基づいて、mysql_errorno()をチェックして、結果オブジェクトの代わりにエラーがあるかどうかを確認します。私は主にPHPの人ではありません。したがって、PHPのMySQLライブラリに関する詳細な背景を持つ人が私と同意しない場合は、彼らの言うことに従ってください。 – Mike

関連する問題