行数の取得
■概要
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の場合だと項目名だけが表示されてしまいます。

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


