0

重複の可能性:
mysql_fetch_array() は、パラメーター 1 がリソースであると想定しており、select でブール値が指定されています

最後にチェックしたコードは問題なく動作していましたが、今は壊れているようです。エラーは次のとおりです。

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/nerblog/public_html/nerblog/arch.php on line 4

...そして、4行目のコードは次のとおりです。

    $q = mysql_query("SELECT * FROM main WHERE month='$month' AND year='$year' LIMIT 12 ORDER BY id DESC");

    while ($sql = mysql_fetch_array($q ))
4

3 に答える 3

3

SQL クエリが失敗しています。「ORDER」の後に「LIMIT」コマンドをクエリの最後に移動してみてください。

SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12
于 2012-05-09T23:01:32.420 に答える
2

ドキュメントによると:

SELECT、SHOW、DESCRIBE、EXPLAIN、および結果セットを返すその他のステートメントの場合、mysql_query() は成功するとリソースを返し、エラーの場合は FALSE を返します。

他のタイプの SQL ステートメント、INSERT、UPDATE、DELETE、DROP などの場合、mysql_query() は成功時に TRUE を返し、エラー時に FALSE を返します。

mysql_query() は、クエリによって参照されるテーブルにアクセスする権限がユーザーにない場合にも失敗し、FALSE を返します。

mysql_fetch_array() 関数は、mysql_query によって返される結果リソースを予期します。その呼び出しが失敗した場合、false が返され、それが mysql_fetch_array() 関数に渡されているため、失敗する理由です。

問題は実際には SQL にあります。LIMIT次のように、クエリの最後に句を付ける必要があります。

 SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12 

クエリのエラーが他のコードに影響しないようにする 1 つの方法は、最初に値を確認することです。

$q = mysql_query("SELECT * FROM main WHERE month='$month' AND year='$year' ORDER BY id DESC LIMIT 12");

if($q != FALSE)
{
   // Query didn't fail, so get results
   while ($result = mysql_fetch_array($q))
   {
      // Do something with $result
   }

}
于 2012-05-09T23:08:33.183 に答える
1

mysql_error()理由があって存在します。

SQL 構文にエラーがあります。1 行目の 'ORDER BY id DESC' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ORDER BYつまり、あなたが置いた場所を見ることを期待していませんでした。その理由は、前ではなくLIMITに来る必要があるためです。 ORDER BY

于 2012-05-09T23:03:34.653 に答える