0

重複の可能性:
警告:mysql_fetch_ *はパラメーター1がリソースであると想定しており、ブール値でエラーが発生します

最近、クライアントから作業を受け取りました。そこでは、減価償却されたphpの古いコードを新しいコードに変更する必要があります。そのコードで、mysql_queryに変換したmysql_db_queryに出くわしましたが、エラーが発生しました

mysql_fetch_arrayは、パラメーター1がリソースであり、ブール値が指定されていることを想定しています。

//the old code was like:

$result = mysql_db_query($mysql_db,"SELECT Hierarchy FROM MenuSystem WHERE LENGTH(Hierarchy) >= 2 AND LOCATE(" . $_SESSION['AccessLevel'] . ",AccessLevels) <> 0;");

//and my new code is :

$result = mysql_query("SELECT Hierarchy FROM MenuSystem WHERE LENGTH(Hierarchy) >= 2 AND LOCATE(" . $_SESSION['AccessLevel'] . ",AccessLevels) <> 0");

問題を教えてください

行番号11を参照します。ここで、はwhileループの終了ブラケットです。

while ($row = mysql_fetch_array($result)) {
    $ConcatHierarchy .= $row["Hierarchy"];
}
4

2 に答える 2

1

文字列にするための引用符がないものに対して、文字列操作を行っています。

... AND LOCATE(" . $_SESSION['AccessLevel'] . ",AccessLevels) <> 0");
               ^--                             ^---

指定されたポイントには一重引用符 ( ') が必要です。現在、「SuperUser」などの文字列を埋め込んでいる可能性があります。引用符がないと、MySQL にはフィールド名として表示されますが、これはほぼ確実に存在しません。

コードに適切なエラー処理があれば、エラー メッセージからすぐに次のことがわかります。

$result = mysql_query(...) or die(mysql_error());
                          ^^^^^^^^^^^^^^^^^^^^^^--- bare minimum
于 2012-08-02T03:33:40.500 に答える
1

唯一のコードがエラーを引き起こすことはわかりません。ただし、$result を配列として使用する場合は、最初に確認する必要があるため、問題が発生する可能性があります。クエリが失敗すると、リソース、つまり配列ではなく FALSE が返されます。

(後でリソースを実際に配列として使用することを意味します。しかし、はい $result は FALSE または mysql_fetch_array() を呼び出すことで使用できるリソースです。コメントに感謝します)

実際には、次のような他の投稿を確認できます。 mysql_fetch_array() はパラメーター 1 がリソースの問題であると想定しています

fyi、マニュアルで示唆されているように、ppl は現在 PDO を好む可能性があり ます。この拡張機能の使用はお勧めしません。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。

于 2012-08-02T02:51:39.893 に答える