$ sql_resultの結果がない場合、エラーをスローします。 行がない場合にエラーを防ぐために、これを行う正しい方法は何ですか?それは前に行を数えなければならないということはできませんか?種類は、任意の応答に関して
mysql_result($sql_result, 0);
... J
$ sql_resultの結果がない場合、エラーをスローします。 行がない場合にエラーを防ぐために、これを行う正しい方法は何ですか?それは前に行を数えなければならないということはできませんか?種類は、任意の応答に関して
mysql_result($sql_result, 0);
... J
if (is_resource($sql_result)) {
$value = mysql_result($sql_result, 0);
}
最初$sql_result
をテストする必要があります。
if ($sql_result !== false # query was successful
&& mysql_num_rows($sql_result) > 0) # query returned rows
{
// do your thing
}
これは私が好むアプローチです:
$sql = "SELECT * ....";
$r = mysql_query($sql);
if (!$r) throw new Exception('Error: ' . mysql_error() . '; Attempted: ' . $sql);
if (mysql_num_rows($r) > 0) {
//Process Result
} else {
//Deal with an empty Result Set
}
少なくとも私のアプリケーションでは、失敗したSQLクエリは契約ブレーカである、ので、MySQLのクエリが失敗した場合、私は例外をスロー:継続通常のスクリプトSQL文やDB接続の問題でエラーが発生しました。アプリケーションがそのような問題を捉えるのに適した場所になるまで、Exceptionは泡立ちます。
私はアプリケーション固有の例外:ExceptionMySQL
を使用しています。そのため、私はアプリケーション内でより高いレベルでそれを知的にキャッチできます。
//Top Level Application
try {
//Execute appropriate application call
} catch (ExceptionMySQL $e) {
//Deal with a mysql exception
} catch (ExceptionPermission $e) {
//Deal with a permission Exception
} catch (//etc. etc. etc.
悪い考えではありませんが、例外的に例外を使用していない場合は、スクリプトが死ぬことに注意してください。クエリが失敗しました。多くの場合、この場合には適切なことですが、それはまだ分かっていることです。 – cHao
@cHaoええ、私は実際に使用する例外を使用するつもりでしたが、私の答えはあまり明確ではないと心配しました=) – Shad
このアプローチは、必要以上に多くの作業とロジックを単一のクエリに追加するようです。クリーン。クエリが悪い場合はPHPがスローしてエラーになりますが、行がない場合はエラーになりません。 PHPは、クエリが良い、結果セットが空で、行があるかのように振る舞いに向かうが、標準プロシージャが1)if(is_resource($ result))、2)while ($ row = mysql_query($ result))は、面倒なExceptionsや単純なif/then/elseではなく空の結果セットを扱うことができます。なぜ複雑なこと? – hexparrot
mysql_resultがエラーをスローするのを止めるもっとも簡単な方法は、*使用を止めることです。それは古代で、もうほとんど維持されていません。 – cHao