For文中に値が届いているが、$resultに値が入らないエラー

このQ&Aのポイント
  • For文中にはmin, max値が届いているが、$resultに値が入らないエラーが発生しています。
  • エラーはSQLでの変数処理に$iの値が届いていないことが原因の可能性があります。
  • 下記のソースコードを確認し、疑わしき点を指摘および修正してください。
回答を見る
  • ベストアンサー

宜しくお願いします。

宜しくお願いします。 mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。 エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。 どうぞ宜しくお願いします。 --エラー文ここから---> Catchable fatal error: Object of class stdClass could not be converted to string in ... --ソースここから---> $min = h($r -> x); $max = h($s -> y); for($i=$min ; $i<= $max; $i++){ $search = sprintf("SELECT id FROM Sheet WHERE no='%d'",$i); $q_search = mysql_query($search); $result = mysql_fetch_object($q_search); echo $result; }

  • PHP
  • 回答数2
  • ありがとう数8

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

  • ベストアンサー
  • aurumnet
  • ベストアンサー率43% (51/117)
回答No.1

PHPあまり詳しくないので間違っていたらすいません。 >$result = mysql_fetch_object($q_search); でresultはobject型で代入しておりそれを表示するときにString型に変換できていないのが原因かとおもわれます。 参考URL mysql-query http://php.net/manual/ja/function.mysql-query.php mysql-fetch-array http://php.net/manual/ja/function.mysql-fetch-array.php mysql_fetch_object http://phpspot.net/php/man/php/function.mysql-fetch-object.html

kaidnu
質問者

お礼

ご教授いただき、有難うございました。

その他の回答 (1)

回答No.2

こんにちは。 #1さんの仰る通りです。 mysql_fetch_objectの戻り値はObjectで、PHPは内部的に、stdClassというクラスを生成して返します。 この場合、$resultはクラスで、SQLの結果はプロパティとして格納されます。 echoで出力するためには文字列にしないと駄目ですが、ここで変換不可能というエラーが発生します。 Object型はArrayには変換できるので、せめてprint_r()かvar_dump()を使えば表示できなくはないですが、そもそもmysql_fetch_objectを使わないでいいような気がします・・・。

kaidnu
質問者

お礼

ご教授有難うございます。 ご指摘の点もございますが、SQL~クエリー発行が正しく処理できてないようなので、SQLを見直しが必要なようです。 とりあえず現状進展の見込みありませんので、一旦本件終了にさせて頂きます。 ありがとうございました。

関連するQ&A

  • PHPとMySQLで配列で検索する方法

    プログラミング初心者です。 PHPとMySQLでデータベースを作成しています。 配列に格納したデータを既に登録してあるデータに参照して、日付と題名が同じものは登録しないようにしたいと思います。 以下がソースなのですが、2行目でエラーがでてしまいます。そうすればよいかご教授お願いします。 for($j=1; $j<$i; $j++){ $query ="select * from data where date=" . $date2[$j]; $result = mysql_query($query) or die(mysql_error()); $query2 ="select * from data where sub=" . $sub[$j]; $result2 = mysql_query($query2) or die(mysql_error()); if(mysql_num_rows($result) != 0 && mysql_num_rows($result2) != 0){ //登録しない } else{      //データベースに登録

    • 締切済み
    • PHP
  • SQLのどこがおかしいでしょうか?

    PHP4、MySQLです。 for($i=1;$i<34;$i++){ $sql = "select count(group) as cnt".$i." "; $sql.= "from stock "; $sql.= "where group=".$i." "; //print "sql= ".$sql."<br>"; $result = mysql_query($sql,$db) or die("失敗しました".mysql_error ()); $Row = mysql_fetch_array($result, MYSQL_ASSOC); $cnt.$i = $Row['cnt".$i."']; } としています。どこがおかしいでしょうか? 教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • エラーが出ます。myswl

    <?php $_POST['form']; $db_server = "mysql84.heteml.jp"; $db_username = "******"; $db_password = "******"; $mysql = mysql_connect($db_server, $db_username, $db_password); if ($mysql) { $table_name= "kensaku"; $mysql= ""; mysql_select_db($table_name, $mysql); mysql_set_charset("ECU"); $sql = "SELECT kai, tiiki, syoku, kei FROM kensaku" . "WHERE tiiki = '" . mysql_real_escape_string($tiiki) . "'"; $result = mysql_query($sql); if ($result) { $data_count = mysql_num_rows($result); for($i = 0; $i < $data_count; $i++) { $row = mysql_fetch_row($result); $j = 0; $data[$i]['kai'] = $row[$j++]; $data[$i]['tiiki'] = $row[$j++]; $data[$i]['syoku'] = $row[$j++]; $data[$i]['koyou'] = $row[$j++]; } mysql_free_result($result); } else { $error['top'] = "データベースのエラーです。" . mysql_error(); } mysql_close($mysql); } if (isset($error)) { echo $error['top']; } else { for($i = 0; $i < $data_count; $i++) { echo $data[$i]['kai'] . "|" . $data[$i]['tiiki'] . "|" . $data[$i]['syoku'] . "|" . $data[$i]['koyou'] . "<br />"; } } ?> 書き忘れとかあればおしえてください。

    • 締切済み
    • PHP
  • ガウス関数を少しずつずらして足し上げるプログラム

    ある値をある検出器に入力したときに出力結果がその入力したを中心にガウス関数のように広がってしまう場合を考え,ある関数の値を小刻みに入力したとき、その関数が出力されたときそれぞれ値のガウス関数の広がりにより重ね合わされてどのように見えるか数値計算してみようと思い、以下のソースコードを書いて見ました。行列で考えてそれぞれの値の寄与を足しあげて見ようとしたのしたのですが、実行結果をみると明らかにおかしい10^19などの数値が見られます。これはなぜでしょうか。私のソースコードのどこに問題があるのでしょうか。お手数をお掛けしますが回答よろしくおねがいします。 インデントが反映されていませんでしたらすみません。 ---------------------------ソースコード------------------------------------------ #include<stdio.h> #include <stdlib.h> #include<math.h> #define N 100 #define f(x) pow(x,-1.7) //この関数が検出器に入力したときどのように見えるか知りたい// void mat_product(double ec[N],double r[N][N],double e[N]) { int i,j; for(i=0; i<N; i++){ for(j=0; j<N;j++){ ec[i]+=r[i][j]*e[j]; } } } int main(void) { int i,j; double ec[N],r[N][N],e[N]; double max,min, ei,E,sigma,min1,min2,m,pi; sigma=0.08; //keV// max=10.5; min=0.5; min1=0.5; min2=0.5; m=0.5; ei=(max-min)/N; pi=3.141592; for(i=0; i<N ;i++){ for(j=0; j<N ;j++){ r[j][i]=(1/(pow(2*pi,0.5)*sigma))*exp(-1*pow(m-min1,2)/(2*pow(sigma,2))); m+=ei; } e[i]=f(min2); m=0.5; min1+=ei; min2+=ei; } mat_product(ec,r,e); for(i=0; i<N; i++){ printf("%g\t%g\n",min,ec[i]); min+=ei; } return 0; } ---------------------------出力結果--------------------------------- 0.5 22.0512 0.6 23.8139 0.7 18.9 0.8 14.9642 0.9 12.1864 1 10.1512 1.1 8.60991 1.2 7.4112 1.3 6.45833 1.4 5.68688 1.5 5.05253 1.6 4.52387 1.7 4.07814 1.8 3.69846 1.9 3.37209 2 3.08926 2.1 2.84239 2.2 2.62547 2.3 2.43375 2.4 2.26337 2.5 2.1112 2.6 1.66592 2.7 1.85166 2.8 1.7404 2.9 1.63941 3 1.54742 3.1 1.46337 3.2 1.38635 3.3 1.31558 3.4 4.47979e+30 3.5 1.19017 3.6 1.13444 3.7 1.08275 3.8 1.0347 3.9 0.989949 4 0.9482 4.1 0.909181 4.2 0.872652 4.3 0.838401 4.4 0.806238 4.5 0.775991 4.6 0.747509 4.7 0.720652 4.8 0.695296 4.9 0.671329 5 0.648648 5.1 0.627161 5.2 0.606783 5.3 0.587437 5.4 0.569053 5.5 0.551566 5.6 0.534917 5.7 0.519053 5.8 0.503924 5.9 0.489483 6 0.475689 6.1 0.462502 6.2 0.449887 6.3 0.437809 6.4 0.426239 6.5 0.415146 6.6 0.404506 6.7 0.394292 6.8 0.384482 6.9 0.375054 7 0.365988 7.1 0.357265 7.2 0.348868 7.3 0.34078 7.4 0.332986 7.5 0.325471 7.6 0.318222 7.7 0.311226 7.8 0.304472 7.9 0.297947 8 0.291642 8.1 0.285546 8.2 0.27965 8.3 0.273945 8.4 -0.0404521 8.5 0.263075 8.6 0.257894 8.7 0.252874 8.8 0.248007 8.9 0.243288 9 0.238709 9.1 7.46629e+19 9.2 0.229953 9.3 0.225764 9.4 0.221696 9.5 0.217743 9.6 0.2139 9.7 0.210164 9.8 0.206531 9.9 0.202996 10 0.199557 10.1 0.196209 10.2 0.192868 10.3 0.185672 10.4 0.140717

  • プログラムが間違っているようなのですが

    ファイルからデータを読み込み、そのファイル内のデータの最大値・最小値を求めるプログラムを作ろうとしているのですが、実行結果が 最大値:0 最小値:0 となり、max2とmin2にうまく値が入っていないようなのです。 main関数にsub_main;を追記してみたりと色々試しているのですが、うまくいきません。 ファイルの読み込みがうまくいっていないのでしょうか。 もしくはポインタの使い方がまずいのでしょうか。 ファイルの内容は 20 40 30 ・ ・ ・ という感じの、不規則な数字の羅列で、今は10個入っています(データ個数が分からない場合も考えているのですが・・・)。 プログラム初心者なので難しいことはあまり分からないですが、助言を頂ければ嬉しいです。 #include<stdio.h> int sub_main(int *tensu,int *max,int *min) { int i=0; FILE *fp; fp = fopen("11.txt","r"); while(fscanf(fp,"%d",&*tensu)!=EOF); { for(i=0;i<10;i++) { if(*tensu+i>*max) *max=*tensu+i; if(*tensu+i<*min) *min=*tensu+i; } } fclose(fp); } main() { int max2=0,min2=0; int *max=&max2; int *min=&min2; printf("最大値:%d\n最小値:%d\n",max2,min2); }

  • ポインターを使った並べ替え

    ポインタを用いてソートを行うプログラムを作成しています しかし、関数部分が悪いのか、上手く作動されません よろしければ、アドバイスをいただけると嬉しいです #include <stdio.h> #define MAX 10 #define RandMax 1000 void select_sort(int *a, int n){ int *i, *min, *last, t; last=a+n; for(i=a; i<last; i++){ min=a; for(i=a+1; i<last; i++) if(*i<*min) min=i; t=*min; *min=*i; *i=t; } } main(){ int *a, i; a=(int*)calloc(MAX,sizeof(int)); for(i=0; i<MAX; i++) a[i]=rand()%RandMax; select_sort(a, MAX); printf("data size=%d \n", MAX); for(i=0; i<MAX; i++){ printf("%5d", a[i]); if(i%10==9) printf("\n"); } } 以上が私の作成したプログラムです よろしくお願いします

  • for文で表示する画像を10件づつ読み込みたい

    データベースに格納した数100件の画像をphpで一覧表示する際に、 一気に読み込まないで10件づつ表示するという形を取ろうとしています。 最初に10件の画像を表示しておいて、 下部にある「もっと見る」のリンクをクリックしたら次の10件を表示する、という機能を 実装したいのですが、良い方法はないでしょうか? 全画像を表示した際のソース $sql .= "SELECT ~"; $result = mysql_query("{$sql}"); $num = mysql_num_rows($result); for($i = 0; $i < $num; $i++){ $arr = mysql_fetch_array($result); <img src="<?php echo $arr[img_path]; ?>" /> }

    • ベストアンサー
    • PHP
  • MySQLのエラー出力

    MySQLで、テーブルのnumberフィールドのレコードでidフィールドのレコードとpwフィールドのレコードを取り出すことをしています。 $sql = mysql_connect('mysql.example.com', 'user', 'pass'); mysql_select_db('exampledb'); $result = mysql_query("SELECT * FROM `memberlist` WHERE `number` = '{$number}'"); while ($row = mysql_fetch_object($result)){ echo "ID:{$row->id}"; echo "PW:{$row->pw}"; } +------+------+------+ |number|id----|pw----| +------+------+------+ |000001|userid|userpw| +------+------+------+ この場合、$numberに000001を代入することで object(stdClass)#1 (3) { ["number"]=> string(6) "000001" ["id"]=> string(6) "userid" ["pw"]=> string(6) "userpw" } となりますが、 これが、もし$numberにnumberフィールドのレコードに無い値が代入された場合、どうやってエラーを出せばいいのですか?

    • ベストアンサー
    • PHP
  • どのような関数名を付けるべきなのでしょうか?

    比重(比率)を利用して乱数を取得したいと思って、 そのような関数を探してたのですが見つからなかったので自作したのですが、 関数名の付け方に迷いがあるのでアドバイス頂けないでしょうか? 例えば array(  array('weight' => 3, 'min' => -3, 'max' => -1),  array('weight' => 7, 'min' => 4, 'max' => 5), ) と値を渡せば、 30%の確率で-3から-1の間でランダムした結果を取得 70%の確率で4から5の間でランダムした結果を取得 できます。 比重(weight)を利用してるので 「randByWeight」 と仮に名前を付けたのですが、 自分としてはそもそも文法的に合ってるのかも曖昧ですし、 プログラム的な命名規則に則してるかも分かりません・・・ まあそんなに深く考えずに「myrand」とかでもいいんでしょうけど、 この関数の作り方や設計の誤りなども含めてアドバイスして頂きたいです。 /**  * randByWeight  *   * @param $params  * @return int  */ function randByWeight($params) {  if (!isset($params[0])) {   $params = array($params);  }    $index = 0;  $range = array();  foreach ($params as $param) {   if ($index >= 1){    $range[$index]['start'] = $range[$index - 1]['end'] + 1;   } else {    $range[$index]['start'] = 1;   }   $range[$index]['end'] = $range[$index]['start'] - 1 + (isset($param['weight']) ? $param['weight'] : 1);   $index++;  }   // srand( (int)( ((float)microtime()) * 1000000 ) );  $ran = rand(1, $range[$index - 1]['end']);  for ($i = 0; $i < $index; $i++) {   if ($range[$i]['start'] <= $ran && $ran <= $range[$i]['end']) {    if (isset($params[$i]['recursive']) && is_array($params[$i]['recursive'])) {     return randByWeight($params[$i]['recursive']);    } else {     if($params[$i]['min'] > $params[$i]['max']) {      $params[$i]['min'] = $params[$i]['max'];     }       return rand($params[$i]['min'], $params[$i]['max']);    }   }  } } // 使用例 $arr = array(  array('weight' => 3, 'min' => -10, 'max' => 1),  array(   'weight' => 1,   'recursive' => array(    array('weight' => 1, 'min' => 2, 'max' => 2),    array(     'weight' => 10,     'recursive' => array(      array('weight' => 3, 'min' => 3, 'max' => 3),      array('weight' => 7, 'min' => 4, 'max' => 4),     ),    ),   ),  ), ); $result = array(); for ($i = 1; $i <= 100; $i++) {  $result[randByWeight($arr)]++; } $sum = 0; ksort($result); foreach ($result as $value => $cnt) {  print "{$value}:{$cnt}<br>\n";  $sum += $cnt; } print "sum={$sum}<br>\n";

    • ベストアンサー
    • PHP
  • cプログラム

    次の10人の身長を入れ、最大と最小を配列を使って求めるプログラムなんですが、この場合だと一人の身長データしか入力できません どのように直せばいいでしょうか? #include <stdio.h> main () { float h[10],max,min; int i; max=-999; min=999; for(i=0;i<=9;i=i+1){ printf("%d番目の身長を入力してください\n",i+1); scanf("%5.1f",&h[i]); if(h[i]>max){ max=h[i]; } if(h[i]<min){ min=h[i]; } } printf("最大の身長は%5.1f,最小の身長は%5.1fです。\n",max,min); return(0); }

専門家に質問してみよう