プロが教える店舗&オフィスのセキュリティ対策術

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は関数を使用した結果なのですが、ここに表示されているという事は、条件式の数字として認識されていないという事でしょうか?
だとすれば、どのようにすれば正常に計算されるのでしょうか?

A 回答 (3件)

>試しに関数の一番下の行(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 10:17
    • good
    • 0

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



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

  http://www.php.net/manual/ja/functions.returning …

この回答への補足

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

補足日時:2008/05/02 22:56
    • good
    • 0

考えられるのは、


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

$suuchi = intval($mojiretsu);

この回答への補足

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

補足日時:2008/05/02 22:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!