mysql_fetch_objectの書き方と修正方法

このQ&Aのポイント
  • MySQLのデータを取得して配列に格納する方法について教えてください。
  • mysql_fetch_objectを使用してデータを取得しようとしていますが、うまくいきません。
  • エラーログには、Trying to get property of non-objectというメッセージが表示されています。修正方法を教えてください。
回答を見る
  • ベストアンサー

mysql_fetch_objectの書き方を教えて下さい。

PHP5.1.6を使用しています。 次のスクリプトを書きましたが、データが取得できません。 $conn_id = mysql_connect("localhost","***","***") or die('Error connecting to MySQL'); mysql_select_db('***',$conn_id); $query ="SELECT abcd,efgh from XYZ where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $ydata = array(); $xdata = array(); while($row = mysql_fetch_array($result)){  ← 11行目 array_push($ydata, $row->efgh);   ← 12行目 array_push($xdata, $row->abcd);   ← 13行目 } エラーログを見ると、 PHP Notice: Trying to get property of non-object in /***/***/****.php on line 12 PHP Notice: Trying to get property of non-object in /***/***/****.php on line 13 となっています。 var_dump($row) 句を入れ、ブラウザから見ると、当然ながら(?)bool(false) と表示されます。 11行目の mysql_fetch_array を mysql_fetch_object に入れ換えて while($row = mysql_fetch_object($result)){ としても結果は変わりません。 リファレンスマニュアルやサンプルを参照して種々手直ししましたが、今ひとつ正解に辿り着けません。 データを取得して配列に入れるには、どのように修正すれば良いか、教えて頂けませんでしょうか。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

確認ですが、 var_dump($result)を確認してみたらそれはresourceになりますか? 一度、$ydata/xdataを置いておいて、 $dataを用意して、 while($row = mysql_fetch_array($result)){ array_push($data, $row); } として、 var_dump、又はprint_rにて、$dataに含まれている値がどうなっているかを確認してみてください。 これで、連想配列のキーとなっているフィールド名が正常に取得できているかなど、切り分けが出来ると思います。

spindle
質問者

お礼

ご示唆のお陰様で問題の方向性が分かってきた気がします。 問題のありかを探る手がかりは掴めたと思います。 しかし、早朝から取り組んでいますが、解決できません。 一旦、締め切らせて頂き、あらためて再質問をさせて頂くことに致します。

spindle
質問者

補足

ご指導ありがとうございます。 (土・日プログラミングのため、) レスポンスが遅くなっており申し訳ありません。 取り敢えず中間のご報告をします。 var_dump($result); の結果は resource(3) of type (mysql result) となって、データは取得できていると思います。 $dataを用意して行うテストは、今度の土・日の休日に行い、ご報告します。 その節は、お手数をかけますが、またご示唆を頂けると有難いと思っています。

関連するQ&A

  • mysql_fetch_objectにデータを取得させたいのですが、うまく行きません。

    データ型 name varchar(30), item1 char(8), item2 int(6) で、テーブルが下記のようなっています。 | name |item1 | item2 | | taro | abcd | 53 | | taro | efghk | 48 | | taro | lmnp | 02 | while文で array_push($ydata, $row->item1) として $row = mysql_fetch_object($result) にデータを取得させたいのですが(スクリプト下記)、 $conn_id = mysql_connect("localhost","***","***") or die('Error connecting to MySQL'); mysql_select_db('***',$conn_id); $query ="SELECT item1,item2 from XYZ where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $ydata = array(); while($row = mysql_fetch_object($result)){   ←10行目 // array_push($ydata, $row->item1);      //  ここに下記の13、14行目を追記 } var_dump($row);echo"<br />\n"; var_dump($result); print_r($row); echo"<br />\n"; これでブラウザから見ると bool(false) resource(3) of type (mysql result) としか出ません。(19行目の結果は表示されません。) そのため 13: echo "item1",$row['item1'],"<br>"; 14 echo "item2",$row['item2'],"<br>"; と追記してブラウザから見ると、単に [ item1 ]とだけ表示されます。 10 行目を while($row = mysql_fetch_arrayt($result)){ に変えてブラウザから見ると item1abcd item253 imem1efghk item250 item1lmnp item258 bool(false) resource(3) of type (mysql result)   となります。 $row = mysql_fetch_object($result) にデータを取得させるにはどのように修正すれば良いのでしょうか?

    • ベストアンサー
    • PHP
  • MYSQLからのarrayデータをjpgraphに表示

    いつもお世話になっています。 MYSQLからデータをarrayで受け取りjpgraphに表示したいのですが SQL、PHP、jpgraphの設定は大丈夫で、 以下抜粋 <?php require_once 'jpgraph.php'; require_once 'jpgraph_bar.php'; $xdata = array('Jan','Feb','Mar','Apr','May'); $graph = new Graph(200,150,'auto'); $graph->SetScale('textlin'); $graph->xaxis->SetTickLabels($xdata); $ydata1 = array(13,9,17,8,13);←ここの部分で の配列を手入力だと問題ないのですが、 <?php mysql_connect('localhost','root','xxxx'); mysql_select_db('xxxxx'); $sql = "SELECT * FROM kaiin WHERE shimei LIKE '%あ%'"; $result = mysql_query($sql); $sp_arr = array(); while($row = mysql_fetch_array($result)){ $sp_arr[] = $row["renban"]; } このSQLからのデータ配列を折れ線グラフにしなくてはならないのですがどうにも動かず、arrayをSESSONでやりとりする予定でいますが、print_rでも中身は見えませんので見当もつかず困っています。 別ページでも扱えるようにセッション変数でのやりとりも含めて 教えていただきたいのですが、どなたかご教授いただけないでしょうか?

    • ベストアンサー
    • PHP
  • mysql_fetch_arrayでレコードが入っていないものも取得したい。

    こんにちは。mysql_fetch_array()でテーブルに入っていないレコードも取得したいのですが、どのようにすればよろしいでしょうか。 テーブルはこんな感じです。 仕事 NUM  1   1  2   1  4   1  5   1 その上で、PHPはこのようになっています。 //データの選択 $sql = "SELECT job, COUNT(*) as num FROM org GROUP BY job"; $res = db_query($sql, $conn); //データの出力 while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $array = array( "job"=>$row["job"], "num"=>$row["num"] ); array_push($array, array( "job"=>$row["job"], "num"=>$row["num"] )); $tmp[] = $array; } return $tmp; このPHPのあと、Smartyに値を渡し、.tplで「A職(○件)」というようなことをやっています。 このときにフィールド「仕事」のレコード「3」は1つもデータが登録されていない状態です。そのためか、現状ではNULL値として扱われるようで、配列$rowに値を渡せず、.tplのほうではデータが表示されません。そこで、レコード「3」にデータを登録せずに、NULL値ではなく、例えば0などの値を渡したいと思います。 どのようなコードを書けば値を渡せるのでしょうか。よろしくお願いします。

    • 締切済み
    • PHP
  • mysql_fetch_array取得結果を2行で

    mysql_fetch_arrayで取得した結果を、 2行で表示させるには、どうすればよいでしょうか? ※そのままだと横に長くなり過ぎるので、 複数行にして、テーブル横幅を抑えたい、です。 <現状> mysql_connect("localhost", "mysql_user", "mysql_password") or die("Could not connect: " . mysql_error()); mysql_select_db("mydb"); $result = mysql_query("SELECT * FROM mytable"); $body .= "<table> <tr> <th>ID</th> <th>氏名</th> </tr>"; while ($row = mysql_fetch_array($result)) { $body .= "<tr> <td></td> <td>".$row[name]."</td> <td>".$row[preid]."</td>

    • ベストアンサー
    • PHP
  • テーブルのデータをarray (array (***, ***)) の形式で取得したい

    id、氏名、年月日(date)、点数(tensu)の列を持つテーブルseiseki があります。 <?php $conn_id = mysql_connect("localhost","root","*****") or die('Error connecting to MySQL'); mysql_select_db('******',$conn_id); $query ="SELECT date,tensu from seiseki; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $date = array(); $tensu = array(); while($row = mysql_fetch_array($result)){ $date[] = $row['date']; $tensu = $row['tensu']; } print_r($date); echo "<br/>\n";      ←15行目 print_r($tensu); echo "<br/>\n";      ←16行目 ?> これをブラウザで見ると、 Array ( [0] => 2009-05-01 [1] => 2009-06-07 [2] => 2009-07-24 ・・・・・・ ) Array ( [0] => 80 [1] => 75 [2] => 90 ・・・・・・・ ) となります。 15,16行目をコメントアウトして print_r($row[“date”],[“$tensu”]); とするとエラーになります。 array (array (2009-05-01, 80), array (2009-06-07, 75 ), array (2009-07-24 , 90)・・・・・・・ ); の形式でデータを取得するにはどのようにすれば良いでしょうか?

    • ベストアンサー
    • MySQL
  • データーベースの結果セットを分けて表示する方法について教えてください(PHP&MYSQL)

    PHP5.2.4 MYSQL14.12DistriB5.0.4 WINXP IE6.0 やりたいこと、結果セットを分けて表示したい。 20行の結果セットがあるとして、結果セットを表示するのに、10行を表示し、その後10行を表示すると言うように、結果セットを分けて表示する方法を教えてください。現在、下のように考えていますが、これでは、表示が、同じになってしまいます。$row=mysql_fetch_array($result);を使っているのがいけないのでしょうが、どう変更したらいいのかわかりません。宜しくお願いします。   for($i=1;$i<10;$i++){     if($i<=20){       $row=mysql_fetch_array($result);     }   }   for($i=11;$i<21;$i++){     if($i<=20){       $row=mysql_fetch_array($result);     }   }

    • ベストアンサー
    • PHP
  • mysql_fetch_rowが 1 を返すことがある

    プログラムコードが多いのですべては載せられないのですが $rid = mysql_query($query = "select base from boards where base='$base'");//base は text型 $rid || die("$query :" . mysql_error() . "\n"); echo "rid: $rid \n"; if (! mysql_fetch_row($rid)) { // そんな行は無い場合の処理・・・ } という箇所で、ときどき rid: 1 Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /path/ to/htdocs/collect.php on line xx という警告が出ることがあります。 mysql_query()でselect文のクエリを発行した場合は成功時にリソースID、クエリ失敗時に FALSE を返すとマニュアルにはあります。 たしかに上記部分が正常に動作する場合は、 rid: Resource id #102 といったリソースIDが表示されます。 では単純に 1 を返す場合は何を意味しているのでしょうか?

    • ベストアンサー
    • PHP
  • phpobjectとmysqlとの連携

    flashとmysqlと連携したいのですが 使い方わからず下記サンプル動きません わかる方いましたら教えてください Example 1: // ** PHP ** // a function in the PHP class that does a simple query and returns the results to Flash function getRecords($dbName, $tableName) { $db = mysql_connect("localhost", "username", "password"); mysql_select_db($dbName, $db); // here's the query $result = mysql_query("SELECT * FROM $tableName "); // here's how we store the results in an array $rs = array(); while ($row = mysql_fetch_row($result)) { array_push($rs, $row); } return $rs; } // ** Actionscript ** // sets up the responder myFoo.getRecords_onResult = function(result) { var j = result.length; for (var i=0; i<j; i++) { // displays each row in the output panel trace("---Record "+i+"---") trace(result[i]); } }

    • 締切済み
    • PHP
  • fetch_arrayでのエラー

    fetch_arrayでのエラー はじめまして。初心者ですが、ご教授頂きたいです。 PHP,mysqlでサイトを作っていますが、 while ($row = mysqli_fetch_array(mysql_query($dbc,"SELECT userid FROM user_a"))) { $data = $row['userid']."member"; //テーブル名 mysqli_query($dbc,"DELETE FROM $data WHERE USERID = 'xxx'"); } このように書いたところ、 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in とエラーが返ってきてしまいます。 テーブル user_a の中にある "userid" を一つずつ取り出し、 それぞれの userid.member というテーブルに xxx がある行を削除していきたいのが目的です。 ネットで探しても、このエラーに関して解決策が書かれているサイトが見当たらなく 途方に暮れている次第です。 どうかお助けください。宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • 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