目的
"S0001"などの文字列を含んだIDを生成するfunction
フロー
str_padを使って文字列にデータ件数+1の数値を結合する
テーブル
Userテーブル
id | user_num | name |
---|---|---|
1 | S001 | 山田 |
2 | S002 | 伊藤 |
3 | S003 | 鈴木 |
書いてみた
function get_user_num($dbh) {
$sql = "SELECT * FROM User";
$stm = $dbh->query($sql);
$rows=$stm->fetchAll(PDO::FETCH_ASSOC);
$count = count($rows);
if ($count == 0) {
$user_num = "S0001";
} else {
$user_num = "S" . str_pad($count + 1, 4, 0, STR_PAD_LEFT);
}
return $user_num;
}
rowCountdで件数を取得しようとしたがSELECT文では非推奨
PDOStatement::rowCount() は 相当する PDOStatement オブジェクトによって実行された 直近の DELETE, INSERT, UPDATE 文によって作用した行数を返します。
SELECT文のような、結果セットを生成するSQLステートメントについては動作が未定義です。 動作はドライバによって異なる可能性があります。 データベース(例: MySQL のバッファリングモード)によっては、文によって返された行数を返すかもしれません。しかしながら、 この振る舞いは全てのデータベースで保証されていません。 さまざまな場所で使用するアプリケーションでは、 これに頼ってはいけません。