0
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C ...

これはコードです

function db_result_to_array($result) {

$res_array = array();

for ($count=0; $row = mysql_fetch_array($result); $count++) { 

    $res_array[$count] = $row;
}

return $res_array;

}

したがって、エラーはこの行にあります

    for ($count=0; $row = mysql_fetch_array($result); $count++)

私は試した

    mysql_fetch_object()
    mysql_fetch_assoc()
    mysql_fetch_row()

そしてうまくいきませんでした

私は試した

    mysql_fetch_array($result, MYSQL_ASSOC)
    mysql_fetch_array($result, MYSQL_NUM)
    mysql_fetch_array($result, MYSQL_BOTH)

そしてそれはうまくいきませんでした。これを解決するのを手伝ってもらえますか?

4

3 に答える 3

2

次のようなコードを実行する必要があります。

$result = mysql_query(...) or die(mysql_error());
$data = array();
while($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

結果セットから行をフェッチするために、通常の for() ループを実行する必要はほとんどありません。whileループを使用する方がはるかに信頼性が高く、簡単です。フェッチするデータがなくなると自動的に終了し、フェッチの最後でループが実行されるというケースに遭遇することはありません。

于 2012-11-03T03:36:34.397 に答える
1

$resultSQLステートメントの結果である必要があり、レコードの行を返すクエリSELECT * From someTableなどであり、クエリは有効な結果を得るために構文が正しい必要があります

$sql = 'SELECT * FROM users'; //make sure no syntax error from generated query
$result = mysql_query($sql); //this should be a valid result [resouce id]

$recordsArray = db_result_to_array($result); //call your function with the valid result. boolean cannot be passed

また、提案どおりに変更forします。while

mysql_ 拡張子の使用はお勧めしません

この拡張機能の使用はお勧めできません。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります...この関数の代替手段には次のものがあります。

  • mysqli_query()

  • PDO::クエリ()

アップデート

上記のMySQLリンクから

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

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

したがって、正常に実行された場合は有効なリソースを取得し、そうでSELECT, SHOW, DESCRIBE, EXPLAINない場合はブール値 (FALSE) を取得します。

INSERT, UPDATE, DELETE, DROPTRUE (成功) または FALSE (エラー) を取得します。

于 2012-11-03T03:43:37.293 に答える
-1

関数を呼び出す前に、$result 変数をどのように割り当てているかを確認してください。この $result を割り当てる際に使用されるクエリは何ですか?

于 2012-11-03T03:38:59.063 に答える