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

解決済みの質問

関数内で処理した内容を計算式で使用するには?

function dbcount($table,$category) {
require_once'DB.php';
$username = "abc";
$password = "abc";
$host = "abc";
$database = "abc";
$db = DB::connect("mysql://$username:$password@$host/$database");
$sql = "select count(*) from $table where $id;";
$result = $db->query($sql);
while($row = $result->fetchRow()){
echo $row[0];
}
}

$kazu = 5;

if ( $kazu >= db("table","key=1") ) {
echo "真";
}
else {
echo "偽";
}

―――――――――――――――――――――――――

といった感じのプログラムなのですが、if文が正常に処理されずに困っています。
関数dbを実行すると60が帰ってくるので、本来ならば「偽」と表示され、るはずなのですが、何故か「真」が表示され、文字の左側には60が表示されています。
60は関数を使用した結果なのですが、ここに表示されているという事は、条件式の数字として認識されていないという事でしょうか?
だとすれば、どのようにすれば正常に計算されるのでしょうか?

投稿日時 - 2008-05-02 21:49:49

QNo.3993199

すぐに回答ほしいです

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

>試しに関数の一番下の行(Whileを閉じた後)に「return $kaerichi;」を挿入し、
>echoで$kaerichiを表示させてみましたが、何も出てきませんでした。

$kaerichiには(関数内で)何をセットしたのでしょう?初期値0にしておいてwhileのLoop内でインクリメントしたのでしょうか(@推測モード)。またecho $kaerichiというのは関数のreturnの直前ですか?関数から戻ったら$kaerichiはスコープ外なので使えません。

私ならば

function dbcount($table,$category) {
  require_once'DB.php';
    :
   (略)
    :
  $sql = "select count(*) from $table where $id;";
  $result = $db->query($sql);
  retuen $result->numRows;
  }

としておいて

  echo dbcount("table","key=1");

で確認しますかねぇ・・

投稿日時 - 2008-05-03 00:28:11

補足

う~ん、おっしゃっている通りのコードで実行してみましたが、何も表示されませんでした。
何処かおかしな部分があるようです。

投稿日時 - 2008-05-03 10:17:44

ANo.3

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

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

回答(3)

ANo.2

>関数dbを実行すると60が帰ってくるので、

function「dbcount」は例示されていますが「db」はどうなっていますか?dbcountにはechoはありますがreturnが見当たりません(echoもLoopの中だし・・)。returnがないfunctionはいわゆるprocedure(subroutine)扱いだと思いますけど。

  http://www.php.net/manual/ja/functions.returning-values.php

投稿日時 - 2008-05-02 22:44:17

補足

スミマセン!関数dbではなく、関数dbcountの間違いでした。
試しに関数の一番下の行(Whileを閉じた後)に「return $kaerichi;」を挿入し、echoで$kaerichiを表示させてみましたが、何も出てきませんでした。
まだ勉強したてでよくわからないのですが、この関数の場合はどういう風に入れるのがベストなのでしょうか?

投稿日時 - 2008-05-02 22:56:23

ANo.1

考えられるのは、
データベースの該当フィールドの種別が、
数値ではなく文字列になるように設定されているなどがありますが、
intvalで文字列を数値に変換してみたらどうでしょうか。

$suuchi = intval($mojiretsu);

投稿日時 - 2008-05-02 22:03:20

補足

countでkey=1のものが何個あるか調べているだけなので、フィールドの種別は関係無いと思います。
dbcountの結果を数値型に型変換しようと試みたのですが、どうもいまいち上手くいきません。
$mojiretsu = db("table","key=1") ;
$suuchi = intval($mojiretsu);
としてみたのですが、$mojiretsuに60が代入されていないようで、変換の仕様がありません・・・。どうすればいいでしょうか?

投稿日時 - 2008-05-02 22:24:21

あなたにオススメの質問