みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

投稿日時 - 2008-01-30 15:36:43

QNo.3728043

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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'や'ファイアーキング'が入ってきますよ。

投稿日時 - 2008-01-30 18:57:46

ANo.3

wp_

>「テーブルの内容を取得するための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()を使えばよいです。


とにかくマニュアルを読んでエラーログ見て、
それでも分からないなら分からないことをキッチリ書いて質問すべきでしょう。

投稿日時 - 2008-01-30 18:50:20

ANo.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文を投げたら必ずエラーチェック入れてください。公開時には詳細な内容表示は出来ないとは思いますが、デバッグ時にはそれなりの情報を表示したいところです。

投稿日時 - 2008-01-30 17:01:44

補足

ご指摘いただいたように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 );
に入れたのですが。。。助けてください・・・

投稿日時 - 2008-01-30 17:40:32

ANo.1

wp_

まにゅある
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回読むと良いかと思います。
// そこまで書けるならばマニュアル一通り読めば大抵の問題は解決するかと。

投稿日時 - 2008-01-30 15:54:02

あなたにオススメの質問