質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

8144閲覧

php レコード件数の表示について

laph

総合スコア17

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/07/20 11:39

前提・実現したいこと

テーブルのレコード件数を表示するようにしたいのですが、件数が1件と表示されて
しまいます。
mysqlで、SELECT count(comment) FROM lcatblを実行すると、3件と表示されます。
正しく3件と表示したいです。 
ご教示、お願いします。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

php

1dbset_count_comme.php 2<?php 3//データベース接続 4$server = "127.0.0.1"; 5$userName = "root"; 6$password = "admin_1001"; 7$dbName = "lcdb"; 8$mysqli = new mysqli($server, $userName, $password,$dbName); 9if ($mysqli->connect_error){ 10 echo $mysqli->connect_error; 11 exit(); 12}else{ 13 $mysqli->set_charset("utf-8"); 14} 15$sql = "SELECT count(comment) FROM lcatbl"; 16$result = $mysqli -> query($sql); 17//クエリー失敗 18if(!$result) { 19 echo $mysqli->error; 20 exit(); 21} 22//レコード件数 23$row_count = $result->num_rows; 24echo "コメント数:".$row_count; 25//結果セットを解放 26$result->free(); 27 28// データベース切断 29$mysqli->close(); 30?>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そうなるでしょうね。

php

1$row_count = $result->num_rows;

ふつうにレコード内容を参照すればいいスよ。
--- 追記 ---
もし上記をそのままにするなら

php

1$sql = "SELECT count(comment) FROM lcatbl";

php

1$sql = "SELECT * FROM lcatbl";

にするです。

投稿2019/07/20 11:44

編集2019/07/20 11:48
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

laph

2019/07/20 11:53

回答ありがとうございます。 $sql = "SELECT * FROM lcatbl"; だと全件数になってしまい、 コメント(comment)のレコードに記入された件数のみえ表示させたいです。 よろしくお願いします。
laph

2019/07/20 12:09

回答をヒントにsql文を見直し解決できました。実行結果のレコード件数を数えるということなんですね。 ありがとうございました。
guest

0

既に解決できる回答がついてはいますが、少し詳細に書いてみます。
※あくまで補足回答なのでできれば先についた回答で解決済みにしてもらいたいです

count()関数は「集約関数」の1つで、集約関数とはその機能のルールに基づいてデータを集約します。
つまり、単体でテーブルに利用した場合、ヒットするデータは1レコード(行数は1」となります。

mysqli_result::$num_rowsは「結果の行数を取得する」ものです。
なので、「1」は正しい結果です。

num_rowsで取り出したいのでしたら、集約関数を使わない、通常のSELECTを利用し、そのmysqli_resultをもってnum_rowsを利用しましょう、 というのがtakasima20さんの回答です。

集約関数を利用したいのでしたら、mysqli_resultをfetch_assoc()でもしてキーcount(comment)で取り出せば良いと思います。
※集約関数などはカラムを指定したりして長くなりがちなので、たいていは別名(エイリアス)をつけてその別名で取り出します。
select count(comment) as comment_cnt from table

ただしnum-rowsのPHPマニュアルの説明にありますように

mysqli_num_rows() が使用可能かどうかは、 結果セットをバッファに格納しているかどうかに依存します。結果セットを バッファに格納していない場合、すべての行を取得し終えるまで mysqli_num_rows() は正確な行数を返しません。

とあるので、件数を取りたい場合はnum_rowsよりもSQLでcount()を実行したほうが確実でしょう。

※でもmysqliよりもPDOを覚えたほうが良いです

投稿2019/07/20 12:15

編集2019/07/20 12:17
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問