🙄
PHP8.1から、MySQLのcount(*)の結果が変わります
レコードの数を返す 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