• ベストアンサー

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」なども試してみましたが,うまくいきませんでした。  初心者ながら,あと少しというところまできたので,「なんとか自分で!!」と検証してみましたが,心が折れてしまいました…。どなたかご指導いただければと思っています。どうぞよろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.3

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()を使った方法にも挑戦してみるのがよいと思います。

ruisu2008
質問者

お礼

 何度もありがとうございます。  ご指導のとおり実施したところ,思ったとおり結果が出ました!!  $linksaki = mysql_result($result, 0);では,rowの部分の意味が理解できず"1"と入れてみたり,指定しなかったりということで,エラーが起きていたみたいです。  調べなおすと,MySQLでは,1行目は0行目なんですね…。クエリー命令で指定しているという事は,テーブル(フィールドも)1件しかないということは"0"となる!!納得しました!!!!(間違っていたらすいません…)。何度もご指導ありがとうございました!!

その他の回答 (3)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.4

ANo.1です。たびたびすいません。 タイトルの時点で問題がありましたね。 厳密な意味でリソースをフィールドの内容にする(データ化する)ことはできません。どこかにそういった記述があったとすればリソースからデータを参照して希望の値を得るということを言いたかったのでしょう。

ruisu2008
質問者

お礼

 おっしゃるとおりです。ご指導ありがとうございます。  データベース用語を含めたプログラミングの知識不足です。恥ずかしながら,私も日々成長していると思います…。今後はしっかりとしたタイトルもつけれるよう勉強いたします。  ありがとうございました!!

  • t_netbug
  • ベストアンサー率34% (15/44)
回答No.2

こんにちは!>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; ?> あと少しですよ!頑張ってください^^

ruisu2008
質問者

お礼

 たびたびご指導いただきましてありがとうございました。  何とか目標となる動きをしてくれました!!(実はエラーが起きるフィールドもあるのですが…。でも,フィールドにある値の問題だと思うので,今度こそご迷惑をかけないよう自力で解決して見せます!!)。  var_dump($linksaki); は,いいですね。中身が入っているのに何故飛ばない!?と苦しんでいましたが,中身がわかるということは,次なる手段に向かう事ができるの,技術的にも精神的にも助かりました…。  連日の回答,本当に,本当にありがとうございました!!本当に感謝です!!!!

ruisu2008
質問者

補足

 昨日は本当にお世話になりました。また,気にかけていただきありがとうございます。  ご指導いただいたvar_dump($linksaki)を活用させていただき,次の活路を見出したいと思います。  なるほど…。エラーの中身を見るということも,今後プログラミングする上で非常に使い勝手がありますねぇ。有効活用させていただきます!!  今度報告するときは絶対に「成功しました」にしたいと思います!!

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.1

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

ruisu2008
質問者

補足

 早速ありがとうございます。mysql_resultもmysql_fetch_arrayも何度か試したのですが,うまくいかなかったので半べそ状態でした…。他のURLも参照して,全ての内容を熟読して,成功へ向けて努力します!!  感謝です!!

関連するQ&A

  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • the right syntax to use near 'Resource id #*'

    いつもお世話になります。思い切ってまたお尋ねします。 環境はPHP4.4.7+MySQL5.0.41です。 mysql> CREATE TABLE bbb( -> id MEDIUMINT NOT NULL AUTO_INCREMENT, -> hiduke DATE, -> apple INT, -> orange INT, -> comment VARCHAR(30), -> PRIMARY KEY (id));  として ----+------------+-------+--------+---------+ | id | hiduke | apple | orange | comment | +----+------------+-------+--------+---------+ | 1 | 2007-10-01 | 25 | 63 | zansuu | | 2 | 2007-10-02 | 30 | 134 | hacchu | | 3 | 2007-10-03 | 28 | 92 | nyuuka | | 4 | 2007-10-04 | 41 | 151 | uriage | | 5 | 2007-10-05 | 14 | 4 | zansuu | +----+------------+-------+--------+---------+ というテーブル[bbb]を作り、フィールド(カラム)のデータを一連に取得したいと思っています(例えばappleの数なら25,30,28・・・・・というように)。 <?php mysql_connect(localhost,PQR,*****); mysql_select_db(XYZ); $sql=mysql_query("select hiduke from bbb");  //または "select apple from bbb" mysql_query($sql) or die(mysql_error().$sql."<br>"); $rows=mysql_num_rows($sql); if($rows == 0){ print "データがありません"; }else{ print($rows["hiduke"]); print "<p>\n"; } ?> と実行すると、 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #3' at line 1Resource id #3 というエラーが出ます。いろいろ調べましたが、意味がわかりません。何がいけないのでしょうか?

  • 「mysqli_fetch_assoc」で、プリペ

    「mysqli_fetch_assoc」で、プリペアドステートしたいのですが、「mysqli_stmt_fetch」との違いなどがよく分かりません。 下記リンク先、「test4.php」のコードを、「mysqli」手続き型用に書き換えていただけないでしょうか? ▽データの取得(SELECT) - MySQLへの接続 - PHP入門   http://www.phpbook.jp/tutorial/mysql/index6.html <希望内容> ・「mysql」→「mysqli」 ・「mysqli」手続き型 ・SELECT idの「id」部分を動的対応(プリペアドステート) ・可能なら(?)、「mysqli_stmt_fetch」ではなく、「mysqli_fetch_assoc」利用

    • ベストアンサー
    • PHP
  • ホームページを製作していて、以下の表示がされます。

    ホームページを製作していて、以下の表示がされます。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/users/0/lolipop.jp-4714bf268f410dba/web/contents/qa/qa.php on line 13 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/users/0/lolipop.jp-4714bf268f410dba/web/contents/qa/qa.php on line 18 ソース部分を表示してみると、 //-サブメニューテーブル--------------------------------------// $con = mysql_connect("mysql517.phy.lolipop.jp","LA05915237","kyoyutt"); mysql_select_db("LA05915237"); $sql="select * from submenu where id=1 "; $rs=mysql_query($sql); $row=mysql_fetch_array($rs);   ← この部分が、13行目 //-トップパーツテーブル--------------------------------------// $sql="select * from topparts where id=1 "; $rs=mysql_query($sql); $row1=mysql_fetch_array($rs);  ← この部分が、18行目 なにがおかしいのでしょうか? MySQL5なのですが、MySQL4の時には、上記エラーは出ないで動作しておりました。 教えてください。

  • selectであるデータを検索した結果のリターンコードを取得するには?

    以下のようなコードをPHP内で実行しています。 以下の例は、MySQLテーブル'test_tbl'の'id'というフィールド内に'500'というデータが存在した場合、そのデータを取り出してecho文で表示させるようにしたものです。 検索した結果データが存在しなかった場合、データが存在していないということを、リターンコードで判断したいと思っています。 リターンコードはどうやって見ることができますか? '$rs'にリターンコードが入ってくるのでしょうか? ('Resource id #3'のような値が返ってくるようですが) リターンコードとその意味の一覧とかが、どこかのサイトにあればURLを教えていただければ助かります。 よろしくお願い致します。 ------------------------------------------------ <?php  if( ! $conn = mysql_connect( 'localhost', 'user_id', 'password') ){   die( 'MySQL接続失敗' );  }  mysql_select_db( 'test_db', $conn );  $rs = mysql_query("SELECT id FROM test_tbl WHERE id = 500", $conn);  $rec = mysql_fetch_array( $rs, MYSQL_ASSOC );  echo $rec['id'];  mysql_free_result( $rs );  mysql_close($conn); ?>

  • mysqlのリターンコードの意味

    'Resource id #3' というmysqlのリターンコードの意味がわかりません。 参考になるサイトなどあれば ぜひ教えていただきたいです。 過去に同様の質問があったようですが http://oshiete1.goo.ne.jp/qa1265208.html すでに参考URLがリンク切れになってましたので 再度質問させていただきました。

  • GETメソッド ID MYSQL

    分からないことがありましたのでご質問をさせて頂きます。 現在作成してる仕様なのですが、 フォームの一つの項目のリンクを設置し、別のページに渡し そこで更に詳細な情報をMYSQLからひっぱってきて表示させようとしております。 そこでGETメソッドを使って行おうとしているのですが、どうしても 変数の受け渡しがうまくいきません。 こちらがそのコードになります。 1,フォーム <td><a href="shousai.php?code=<?php echo $row['id'];?>">詳しくはこちら</a></td> 2,詳細ページ(shousai.php) <?php echo var_dump($_GET["id"]); $id = $_GET["id"]; $con = mysql_connect('localhost','aaaa','aaa'); if (!$con) { print("MySQLへの接続に失敗しました"); exit; } if (!mysql_select_db("database")) { print("データベースへの接続に失敗しました"); exit; } $sql="select * from table where id ='$id'"; $result=mysql_query($sql,$con); //SQL文の発 $rows=mysql_num_rows($result); while($row = mysql_fetch_array($result)){ ?> <table border ="1"> <tr><td><?php echo $row["name"]; ?></p></td></tr> <tr><td><?php echo $row["address"]; ?></td></tr> <tr><td><?php echo $row["station"]; ?></td></tr> <?php } ?> </table> 2の詳細ページにてvar_dumpで$_GET["id"];の値を受け取ってるか 確かめたのですがNULLになっており、ページになにも反映されません。 フォームからリンクで値を送り、それをきっかけにデータベースに接続して詳細を表示させたいと思っております。 どなたかご存知の方お伺いできませんでしょうか?

    • ベストアンサー
    • PHP
  • mysql_fetch_array の関数について

    はじめまして、お世話になります。 php/SQL共に初心者レベルなのですが、ご指導ください。 mysql_fetch_array のSQLの結果が複数件ある場合なのですが、 参考書通り $sql = "select * from category where parent_id = '0' order by category_name"; $result = mysql_query( $sql ); while ( $category = mysql_fetch_array( $result ) ) echo "<a href=result.php?category_id=${category['category_id']}>${category['category_name']}</a> | "; とコーディングしたものの、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/アカウント名/public_html/アカウント名/topbar.php on line 26 とエラーが表示され困っています。 参考書にもエラーの詳細など記載れていませんし、他の媒体での色々と答えを探してはみたものの意味がわかりません。 解る方いらっしゃいましたら是非ご指導ください。 宜しくお願いします。

    • 締切済み
    • PHP
  • mysqlのデータを変数に代入する方法

    php/mysql初心者です。かなりつたない内容になっているかもしれませんが、ご容赦ください。 過去ログで何のワードで検索したらいいかもわからなかったので質問投稿させていただきます。 データベースに入っている情報を変数に代入して POSTメソッドで送信したいと考えています。 DBからSELECTで特定の情報を取り出す ↓ 変数に代入する ↓ POSTで送信 このような流れで処理したいです。 [環境] PHP 5.2.17 MySQL 5.1.59 今書いているソースを一部抜粋します。 ------------ <?php if ($_SERVER['REQUEST_METHOD']=="POST") { require_once "Request.php"; $req =& new HTTP_Request("【送信先URL】"); $req->setMethod(HTTP_REQUEST_METHOD_POST); $connect = mysql_connect('localhost', '【DB名】', '【パスワード】'); if (!$con) { exit('データベースに接続できませんでした。'); } $result = mysql_select_db('【データベース名】', $connect); if (!$result) { exit('データベースを選択できませんでした。'); } $db = mysql_query('SELECT username FROM userinfo where id=6', $connect); $u="$db"; $req->addPostData("username", $u); $con = mysql_close($con); if (!$con) { exit('データベースとの接続を閉じられませんでした。'); } ?> ------------ ※idが6のusernameは「テスト太郎」になっています。 上記のPHPを実行すれば"userinfo"テーブル内の"id"が6の"username"が 送信されると思いましたが、実際は異なる内容が送信されます。 送信されるデータはusernameの内容ではなく "Resource data"となっています。 なぜ$uに代入した値がResource dataという内容になるのでしょうか。 初歩的な質問かもしれませんが、 ご教示の程よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • リストから詳細画面に遷移するためのリンク作成と詳細画面の表示

    PHP5とMySQL4.0の組み合わせで、初歩的なことがわかりません。 例えば、(1)社員IDと、(2)年齢、(3)名前をリストアップする画面があるとして、 IDのところをハイパーリンクにして、それを押すとその社員の レコード内容を更新する画面を出す、みたいなことをしたいのですが、 これって method="POST" でなく、GETでやるのですよね? 「IDのリンク」とは、<a href="syain_detail.php?id=100">みたいなカタチに なるのでしょうが、具体的なスクリプトでご教示いただけないでしょうか。 単純に(IDへのリンクを考えずに)DBのレコードをPOSTでざーっと リストアップするHTMLまではできるのですが、 IDをハイパーリンクにして次の画面を構成するPHPがさっぱり わからないのです。下記、DBのサンプルと、わたしにわかるスクリプトです。 --------syainmaster---------- id   age  name ---------------------- 100   20   suzuki 200   24   sato 300   30   tanaka ----------------------- <?php   $con = mysql_connect(localhost, root, mypass);   $selectdb = mysql_select_db(mydb, $con);   $sql = "select * from syainmaster";   $rst = mysql_query($sql, $con);   $recmax = mysql_num_rows($rst);   $body = "<TABLE>";   for ($recnum = 0; $recnum < $recmax; $recnum++) {     $col = mysql_fetch_array($rst);     $body .= "<TR>";     $body .= "<TD>" . $col["id"] . "</TD>";     $body .= "<TD>" . $col["age"] . "</TD>";     $body .= "<TD>" . $col["name"] . "</TD>";     $body .= "</TR>";   }   $body .= "</TABLE>";   $con = mysql_close($con); ?> <HTML> <BODY> <?= $body ?> </BODY> </HTML>

    • ベストアンサー
    • PHP

専門家に質問してみよう