ここから本文です

テーブルのレコード数を取得する データベースはMySQLを使用しテーブルを作成し...

m03********さん

2014/8/1619:52:56

テーブルのレコード数を取得する

データベースはMySQLを使用しテーブルを作成し、データも入れました。データの表示などは上手くできました。

しかしPHPでそのテーブルのレコード数を取得し表示しようと思いましたが上手くいきません。

$dbh = new PDO($dsn, $user, $password);
$dbh->query('SET NAMES utf8');
$result = $dbh->query("SELECT * FROM baseball");
$row_cnt = $result->num_rows;
printf("Result set has %d rows.\n", $row_cnt);

これだと結果が0と表示されてしまいます。
どのようにすればちゃんとレコード数を取得し表示することができるでしょうか?

よろしくお願いします。

閲覧数:
769
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shimixさん

2014/8/1623:43:55

>$row_cnt = $result->num_rows;

$resultは$dbh->queryの戻り値ですからPDOStatementクラスですよね?PDOStatementクラスにはnum_rowsというプロパティ(or メソッド)はありません。エラーを表示する設定にしていれば(デバッグ時は当然この状態であるべき)「Notice: Undefined property: PDOStatement::$num_rows」というエラーメッセージが表示されるハズです。

RTFM.
http://www.php.net/manual/ja/class.pdostatement.php

書くとすれば

$row_cnt = $result->rowCount();

でしょう。



あと、set namesを使ってはいけません。DSNで指定してください。

http://www.php.net/manual/ja/ref.pdo-mysql.connection.php

また接続時のoptionで(もしくは接続直後にsetAttributeで)エラーモードを設定するようにしてください。デフォルトはサイレントモードです。

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);





ちなみに、普通は(レコード数だけが必要ならば)

$stmt = $dbh->query("SELECT count(*) as cnt FROM baseball");
$ret = $result->fetch();
$row_cnt = $ret['cnt'];

とすると思います。

質問した人からのコメント

2014/8/17 08:31:02

降参 回答ありがとうございます。
先ほどコードを修正して実行したら、レコード数が正常に取得することが出来ました。
勉強になりました。ありがとうございました。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる