• 締切済み

phpとmysqlでサイトのコンテンツを制作しているのですが...

phpとmysqlでサイトのコンテンツを制作しているのですが、どうにも解決できないのでどなたかアドバイスをいただけないでしょうか? mysqlで $result = @mysql_query( 'drop tabl main_categories;' ); $sqlstr = "create table main_categories (id INTEGER primary key AUTO_INCREMENT,"."category TEXT)"; $result = mysql_query( $sqlstr ); としてテーブルを作ってこれをphpでデータを取得し格納したいのですがうまくいきません。取得データを $arr=mysql_fetch_array($result); で格納してforeachで出力?したいのですが。。。 foreach( $arr as $key => $value ) { if($value['category'] != ''){ array_push($categories_arr,$value['category']); array_push($catid_arr,$value['id']); } } どなたか教えてください!もう8hはまってます=3

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.4

>ご指摘いただいたようにprint_r($arr);を試してみました。 >そしたらこんなものが出てきました。 >Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) ですから「foreachで回さずに」   array_push($categories_arr,$arr['category']);   array_push($catid_arr,$arr['id']); すればいいのでは?foreachで回すと、keyが'id'とか'category'で、$valueに'1'や'ファイアーキング'が入ってきますよ。

すると、全ての回答が全文表示されます。
  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

>「テーブルの内容を取得するためのSQL文」をmysql_queryで投げた戻り値 ということでしたか。これは当方の考え違いですな。 それにしてもマニュアルは読んだのかと・・・・ [マニュアルより] 取得した行をあらわす配列を返します。もし行が存在しない場合は FALSE を返します。返される配列の形式は、result_type がどのように指定されているかによります。MYSQL_BOTH(デフォルト) を利用すると、連想添字と数値添字を共に持つ配列を取得します。 MYSQL_ASSOC を利用すると( mysql_fetch_assoc() の動作と同様に)連想添字のみが取得され、 MYSQL_NUM を利用すると (mysql_fetch_row() の動作と同様に)数値添字のみが 取得されます。 MYSQL_BOTHだからそんな使いづらいデータになるのです。 おそらく「同じレコードが二つあって困ってる」というのが質問の主旨ではないのですかね。 大人しく明示的にMYSQL_ASSOCを引数に入れるかmysql_fetch_assoc()を使えばよいです。 とにかくマニュアルを読んでエラーログ見て、 それでも分からないなら分からないことをキッチリ書いて質問すべきでしょう。

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

ちゃんとテーブルが作成できていることは確認されていますよね?データの投入はどうされたんでしょう? >$arr=mysql_fetch_array($result); この$resultはテーブルを作るときのソースではなく、「テーブルの内容を取得するためのSQL文」をmysql_queryで投げた戻り値ですよね?そのときのSQL文の内容が書かれていないので何とも判断できません。 あと、取得した(出来ているかどうかはSQL文がないので不明ですが)レコードに内容($arr)を foreach( $arr as $key => $value ) { で回しているのに$value['category']とはどういう意味でしょう?とりあえず print_r($arr); として$arrの内容を確認されることをお勧めします。 なお、mysql_queryでSQL文を投げたら必ずエラーチェック入れてください。公開時には詳細な内容表示は出来ないとは思いますが、デバッグ時にはそれなりの情報を表示したいところです。

gooth_1980
質問者

補足

ご指摘いただいたようにprint_r($arr);を試してみました。 そしたらこんなものが出てきました。 Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) Array ( [0] => 1 [id] => 1 [1] => ファイアーキング [category] => ファイアーキング ) テーブルには $sqlstr = "insert into main_categories values (1,'ファイアーキング')"; $result = @mysql_query( $sqlstr ); に入れたのですが。。。助けてください・・・

すると、全ての回答が全文表示されます。
  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

まにゅある http://jp.php.net/manual/ja/function.mysql-affected-rows.php http://jp.php.net/manual/ja/function.mysql-query.php create文などはmysql_fetch_array()で結果を取れません。 create/drop文の結果はリソースとして返ってきた値がtrueなのかfalseなのかで判断しましょう。 >drop tabl main_categories; tabl?tableのtypo? そもそもmysql_query()に渡すクエリにはセミコロンを書いてはいけません。 @でエラーを抑制しているのもわけが分かりません。 意図しない動作をしたらエラーログを見ましょう。 また、質問者様はまだマニュアルをあと42回読むと良いかと思います。 // そこまで書けるならばマニュアル一通り読めば大抵の問題は解決するかと。

すると、全ての回答が全文表示されます。

関連するQ&A