- ベストアンサー
Resource id #3 をフィールドの内容にしたい
昨日まで,データのカウントと,リンクについてご指導をいただいた者ですが,その後ご指導された内容を検討しても解決できず,また質問いたしました。よろしくお願いします。 まずは,プログラムですが,主要なところだけ載せます。 <?php ~接続部分は省略~ $link = "select link from table where No = $_GET[id]"; $linksaki = mysql_query($link, $con); header("location: ".$linksaki); exit; ?> データベースから,選択したIDのフィールドlinkにあるURL内容を,"location: "で移動させたいと思っています。この命令の結果は,”Object not found!”つまり,リンク先が見つからないでした。よくよく見てみると,URL部分に「Resource id #3」を意味する「http://...../Resource%20id%20#3」と入っている。つまり,$linksakiにはURLが入っていないということになります。 いろいろ調べましたが,「Resource id #3」の意味は,「データにアクセスして返ってきました」の様な結果の内容なので,データ化する必要があるとのことから,「mysql_fetch_array」や「sprintf」なども試してみましたが,うまくいきませんでした。 初心者ながら,あと少しというところまできたので,「なんとか自分で!!」と検証してみましたが,心が折れてしまいました…。どなたかご指導いただければと思っています。どうぞよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1です。 うまくいきませんでしたか。 改めて書かれたコードを見ましたが、変数の命名の仕方に解釈の誤りが感じられます。 まず$linkについて、代入される内容を見るとSQL文なので$sqlとでもした方がよいでしょう。$linkと書くとリンク先が代入される感じがしますし、マニュアル中ではDBへのリンク(=接続)を格納する変数として使われています。 次に$linksakiですが先の回答でも書いたとおり、ここにはSQLを実行した結果のリソースが入ってきます。ですので$result、$resなどとするのが一般的です。 くどいようですが、mysql_query()の返す結果はリソースであって、select文で指定したフィールドの値そのものではありません。 変数の命名はエラーにはつながりませんが、格納される内容とあまりにかけ離れた名前をつけると誤解や混乱を招き易いので、できるだけ適切な命名を心がけるべきです。 以上を考慮して、以下のように書き直してみます。 //DB接続 $con= mysql_connect( 省略 ); //SQL生成 $sql = "select link from table where No = $_GET[id]"; //SQL発行 $result = mysql_query($sql, $con); //リンク先を取得 $linksaki = mysql_result($result, 0); これで$linksakiの内容を確認してみてください。おそらく問題ないはずです。 これが理解できたらmysql_fetch_array()を使った方法にも挑戦してみるのがよいと思います。
その他の回答 (3)
- UmJammer
- ベストアンサー率58% (115/196)
ANo.1です。たびたびすいません。 タイトルの時点で問題がありましたね。 厳密な意味でリソースをフィールドの内容にする(データ化する)ことはできません。どこかにそういった記述があったとすればリソースからデータを参照して希望の値を得るということを言いたかったのでしょう。
お礼
おっしゃるとおりです。ご指導ありがとうございます。 データベース用語を含めたプログラミングの知識不足です。恥ずかしながら,私も日々成長していると思います…。今後はしっかりとしたタイトルもつけれるよう勉強いたします。 ありがとうございました!!
- t_netbug
- ベストアンサー率34% (15/44)
こんにちは!>w<ノ あれから気になっていました。 #1の方がサンプル付きのページを乗せてくれたので恐らく解決は時間の問題と思います。 前回書きたかったアドバイスをここで。 phpで変数にどんな値が入っているかを確認したい時は var_dump(中身を確認したい変数); を使うと良いですよ^^ これを知っているかいないかでエラーが起きた時の原因を理解するまでの時間が圧倒的に変わりますよ^^ 書かれているソースに対してvar_dumpを記述するならこうなります。 <?php //~接続部分は省略~ $link = "select link from table where No = $_GET[id]"; $linksaki = mysql_query($link, $con); var_dump($linksaki); //中身を見る //header("location: ".$linksaki); //エラーを見たいので一時的にジャンプさせないようにする exit; ?> あと少しですよ!頑張ってください^^
お礼
たびたびご指導いただきましてありがとうございました。 何とか目標となる動きをしてくれました!!(実はエラーが起きるフィールドもあるのですが…。でも,フィールドにある値の問題だと思うので,今度こそご迷惑をかけないよう自力で解決して見せます!!)。 var_dump($linksaki); は,いいですね。中身が入っているのに何故飛ばない!?と苦しんでいましたが,中身がわかるということは,次なる手段に向かう事ができるの,技術的にも精神的にも助かりました…。 連日の回答,本当に,本当にありがとうございました!!本当に感謝です!!!!
補足
昨日は本当にお世話になりました。また,気にかけていただきありがとうございます。 ご指導いただいたvar_dump($linksaki)を活用させていただき,次の活路を見出したいと思います。 なるほど…。エラーの中身を見るということも,今後プログラミングする上で非常に使い勝手がありますねぇ。有効活用させていただきます!! 今度報告するときは絶対に「成功しました」にしたいと思います!!
- UmJammer
- ベストアンサー率58% (115/196)
mysql_query()の返り値はリソース型です。 それを踏まえてmysql_result()なりmysql_fetch_array()なりの説明をよく読めば解決するでしょう。サンプルも載ってますし。 http://jp.php.net/manual/ja/function.mysql-result.php http://jp.php.net/manual/ja/function.mysql-fetch-array.php http://jp.php.net/manual/ja/function.mysql-fetch-assoc.php http://jp.php.net/manual/ja/function.mysql-fetch-row.php
補足
早速ありがとうございます。mysql_resultもmysql_fetch_arrayも何度か試したのですが,うまくいかなかったので半べそ状態でした…。他のURLも参照して,全ての内容を熟読して,成功へ向けて努力します!! 感謝です!!
お礼
何度もありがとうございます。 ご指導のとおり実施したところ,思ったとおり結果が出ました!! $linksaki = mysql_result($result, 0);では,rowの部分の意味が理解できず"1"と入れてみたり,指定しなかったりということで,エラーが起きていたみたいです。 調べなおすと,MySQLでは,1行目は0行目なんですね…。クエリー命令で指定しているという事は,テーブル(フィールドも)1件しかないということは"0"となる!!納得しました!!!!(間違っていたらすいません…)。何度もご指導ありがとうございました!!