Developer

【PHP基礎】mysqli関数⑧ 行数の取得
2021.02.28
Lv1

【PHP基礎】mysqli関数⑧ 行数の取得

行数の取得

■概要

mysqli_num_rows関数を使用すると、結果セットの行数を取得することができます。

■サンプルプログラム

現在のテーブルの状態は以下です。

この状態で以下のサンプルプログラムを実行してみます。

num_rows.php

<?php

    // 接続処理
    $con = mysqli_connect('localhost', 'root', '', 'sample_db');
    if(!$con) {
        die('接続に失敗しました');
    }
    
    // 文字コード
    mysqli_set_charset($con, 'utf8');

    // SQLの発行と出力
    $sql = "SELECT * FROM members";
    $res = mysqli_query($con, $sql);
    $num_rows = mysqli_num_rows($res);

    echo $num_rows;

    // 接続断
    mysqli_close($con);
?>

結果

レコード数が表示されました。
SQLのCOUNT関数と同じですね。

SELECT COUNT(*) FROM members;

このように行数(レコード数)を取得することができます。

■応用

この行数を使用して、前回のサンプル(select2.php)をブラッシュアップしてみましょう!

select3.php

<?php

    // 接続処理
    $con = mysqli_connect('localhost', 'root', '', 'sample_db');
    if(!$con) {
        die('接続に失敗しました');
    }
    
    // 文字コード
    mysqli_set_charset($con, 'utf8');

    // SQLの発行と出力
    $sql = "SELECT * FROM members";
    $res = mysqli_query($con, $sql);
    $num_rows = mysqli_num_rows($res);

    if($num_rows == 0) {
        echo "<div>データがありません</div>";
    } else {
        echo "<table border='1'>";
        echo "    <tr>";
        echo "        <th>ID</th>";
        echo "        <th>名前</th>";
        echo "        <th>年齢</th>";
        echo "        <th>住所</th>";
        echo "    </tr>";
    
        while($row = mysqli_fetch_assoc($res)) {
            echo "<tr>";
            echo "  <td>{$row['id']}</td>";
            echo "  <td>{$row['name']}</td>";
            echo "  <td>{$row['age']}</td>";
            echo "  <td>{$row['address']}</td>";
            echo "</tr>";
        }
    
        echo "</table>";
    }
   
    // 接続断
    mysqli_close($con);
?>

結果

前回と変わってないですね。
しかし、実はmembersテーブルにデータが無かった場合(レコード数が0)だった場合の処理が違います。

一度membersテーブルを空にして、もう一度プログラムを実行してみます。
※以下のコマンドでデータを消すと元に戻せないので気を付けましょう

TRUNCATE TABLE members;


結果

データがありませんと表示されました。
select2.phpの場合だと項目名だけが表示されてしまいます。

もしデータが空だった場合、どちらの表示がユーザーにとってわかりやすいでしょうか?
後者の場合は、「何かしらのバグで表示が消えてしまっているのでは?」とも捉えられます。
そう考えると、データがありませんと表示してあげる方がわかりやすいですね。
このように行数を利用すると、ユーザーに親切なシステムにすることができます。

PHP基礎 連載目次リンク

PHP基礎 連載目次