🙄

PHP8.1から、MySQLのcount(*)の結果が変わります

2022/05/02に公開

レコードの数を返す count() ですが、PHP8.0までは string型 で返ってきていました。
ところが、PHP8.1からは int型 で返ってきます。

これが問題になるケースとしては、=== の型一致で評価していた場合です。

if( '1' === $count ){
  //  PHP8.1では一致しない
}

== で評価していた場合は問題ありません。

if( '1' == $count ){
  //  どのバージョンのPHPでも一致する
}

確認したソースコードは、以下になります。

$dsn      = 'mysql:dbname=phpbeginners;host=127.0.0.1;charset=utf8mb4;';
$user     = 'phpbeginners';
$password = 'hogehoge';

$pdo = new PDO($dsn, $user, $password);
$stm = $pdo->query('SELECT count(*) as count FROM t_table');
$record = $stm->fetch(PDO::FETCH_ASSOC);
var_dump($record['count']);

Discussion