2017-12-07 12 views
-3

EDIT:MySQL_queryをwhileループで実行するのではなく変数にするというPhilのコメントが正解でした。mysql_fetch_assocを呼び出すと、複数回呼び出された場合でも最初の結果が返されます(閉じる:TYPO)

私は、アイテムテーブルのすべてのアイテムをMySQL_fetch_assoc演算子を使用してプリントアウトしようとしています。 whileループで呼び出された場合でも最初の結果だけを返しますが、実行中のコマンドラインから呼び出されると、すべての正しい結果が返されます。私は$numRows > 0の条件を使わずにwhileコマンドを実行しようとしましたが、最初の結果のみを含む無限の配列を返します。

... 
$query = "SELECT * FROM item JOIN seller ON item.seller_id = seller.seller_id;"; 
$numRows = MySQL_num_rows(MySQL_query($query)); 
while ($numRows > 0 && $row = MySQL_fetch_assoc(MySQL_query($query))) { 
echo "<tr><td>" . $row["item_name"] . "</td>\n" . 
" <td>" . $row["category"] . "</td>\n" . 
" <td>" . $row["item_price"] . "</td>\n" . 
" <td>" . $row["user_email"] . </td>\n" . 
" </tr>\n"; 
$numRows--; 
... 

これは、すべての項目

Name Category Price Seller Email 
cup utensils 200 [email protected] 
shaker utensils 300 [email protected] 
spoon utensils 400 [email protected] 

のテーブルを返すだけであなたのwhileループは、それぞれの新しいリソースを作成している

Name Category Price Seller Email 
cup utensils 200 [email protected] 
cup utensils 200 [email protected] 
cup utensils 200 [email protected] 
+1

これはあなたの問題を解決するものではありませんが、mysql_コンストラクタはPHP **の** **で廃止予定です(https://wiki.php.net/rfc/mysql_deprecation) ** PHP 7 **で削除されました](https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7#extmysql)。 [** MySQLi **](http://php.net/manual/en/book.mysqli.php)または[** PDO **](http://php.net/manual/)への切り替えを検討してください。 en/book.pdo.php)を使用して、[** prepared statements **](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用して[** SQLインジェクション**](https://en.wikipedia.org/wiki/SQL_injection):) –

+0

@ObsidianAgeそれは分かっていますが、私は学校のサーバーがまだPHPバージョン<= 5.5を使用していると思います。 MySQLIを補うようにしてください。何も返されません。 – Spikes

+1

同じクエリを再実行しています。あなたは 'mysql_query()' ** **を一度呼び出すだけで、結果を変数に保存する必要があります。 – Phil

答えて

0

最初の結果でテーブルを返すべきです反復をMySQL_query($query)式で実行すると、MySQL_fetch_assoc(MySQL_query($query))を呼び出すと、常にクエリの最初の行が表示されます。

これを解決するには、whileループの前にリソースを作成し、そのリソースでMySQL_fetch_assoc()を呼び出します。

例:オブシディアン年齢として

$query = "SELECT * FROM item JOIN seller ON item.seller_id = seller.seller_id;"; 
$res = MySQL_query($query) 
$numRows = MySQL_num_rows($res); // You can also modify this line 
while ($numRows > 0 && $row = MySQL_fetch_assoc($res)) { 
    ... 
} 

はまた、あなたがMySQLiをやPDOへの移行を検討すべきである、と述べました。 MySQLiは、すべてのコードが古いMySQL関数を使用している場合に転送するのが特に難しいです。

+0

* "MySQLiは特に痛みがありません" * - おそらく最悪のアドバイスの1つですが、それほど普及しているようです。 PDO APIは**使用するほうがはるかに単純です**、初心者のデベロッパーにとってはデフォルトの選択だと思うでしょうが、このような投稿のために – Phil

+0

ではありません。また、この質問には本当に答えは必要ありません – Phil

+0

^それは主観的ではないのですか?個人的に私はMySQLiがPDOより簡単に動作することを発見しました:)しかし、おそらくそれは私が2人と一緒に過ごした時間の対比のためです:P –

関連する問題