はじめに
PHP
の勉強しているときにphpMyAdmin
で管理してるMySQL
のデータベースにはAUTO_INCREMENT
という便利機能があることを知った。
早速、やってみよう!!
AUTO_INCREMENTとは
簡単に言えば、自動割り当て。
カラムでの値を指定しなければMySQL
が自動で整数を割り当ててくれる。
1,2しか入ってないカラムならAUTO_INCREMENT
では3が割り当てられる。
MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる
データベース初期設定
まずはphpMyAdmin
で新規データベース、テーブルの作成
カラムの設定はこんな感じに(4つもいらなかった…)
とりあえずコードを書いたときにデータベースに接続できてるか確認するために適当なデータ挿入
今回は使わないけど、主キーをつける癖は付けといた方が良いよね
データベースの設定はこんなもんかな
ファイル作成
今回必要なファイルは3つ
-
example
テーブルのデータ一覧を表示するファイル =list.php
-
example
テーブルに追加するデータを記述するファイル =add_data.php
-
example
テーブルにデータを追加するファイル =add_data_finish.php
list.php

<?php
function php_code(){
$db_link = mysqli_connect('localhost',ユーザー,パスワード,'auto_increment');
//MySQLに接続
$get_data = "SELECT * FROM example ORDER BY id;";
//exampleテーブルからデータを昇順で取得するクエリ
if($result = mysqli_query($db_link,$get_data)){
//クエリの実行
foreach ($result as $row) {
echo '<tr>';
echo '<td>'.$row['id'].'</td>';
echo '<td style="text-align: center;">'.$row['name'].'</td>';
echo '<td style="text-align: center;">'.$row['comment'].'</td>';
echo '<td>'.$row['days'].'</td>';
echo '</tr>';
//<tr>はこのループ内に記入しないとデータが一列で表示されるので注意
}
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>データ一覧</title>
</head>
<body>
<h2>データ一覧</h2>
<table>
<tr>
<th>ID</th>
<th>NAME</th>
<th>COMMENT</th>
<th>DAYS</th>
</tr>
<?php php_code()?>
</table>
<br/>
<a href="add_data.php">データを追加する</a>
</body>
</html>
add_data.php

<?php
date_default_timezone_set('Asia/Tokyo');
$days = date("Y/m/d H:i:s");
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>データ追加</title>
</head>
<body>
<h2>データ追加</h2>
<form action="add_data_finish.php" method="post">
<p>ID<p>
<input type="text" name="add_id" required>
<p>NAME<p>
<input type="text" name="add_name" required>
<p>COMMENT<p>
<input type="text" name="add_comment" required>
<p>DAYS</p>
<p><?php echo $days; ?></p>
<input type="hidden" name="add_days" value="<?php echo $days; ?>">
<input type="submit" value="登録">
</form>
<br/>
<a href="list.php">データ一覧へ</a>
</body>
</html>
add_data_finish.php

<?php
$db_link = mysqli_connect('localhost',ユーザー,パスワード,'auto_increment');
$add_id = $_POST['add_id'];
$add_name = $_POST['add_name'];
$add_comment = $_POST['add_comment'];
$add_days = $_POST['add_days'];
$add_data = "INSERT INTO example VALUES ('$add_id','$add_name','$add_comment','$add_days');";
//add_dataで記入したデータをexampleテーブルに渡すクエリ
mysqli_query($db_link,$add_data);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>追加完了</title>
</head>
<body>
<h2>データを追加しました</h2>
<br/>
<a href="list.php">データ一覧へ</a>
</body>
</html>

phpMyAdminでAUTO_INCREMENT設定
ここから本題
まずはphpMyAdmin
でAUTO_INCREMENT
を設定する
構造タブからAUTO_INCREMENT
を有効にしたいカラムを選んで変更
をクリック
今回はid
を選択
画面が変わったらA_I
の下のチェックボックスをクリックして、チェックをつけて保存する
画面が変わって、指定したカラムのその他
の列にAUTO_INCREMENT
の文字があればphpMyAdmin
での作業は以上
AUTO_INCREMENTを使用したPHPファイルを作成する
さっき作成したPHPファイルの中でAUTO_INCREMENT
を使えるようにするのに操作する必要があるのは2つ。
-
add_data.php
→ 次に自動割り当てされる数字を見つけ、$_POST
に格納し送信できるようにする -
add_data_finish.php
→$add_data
クエリにAUTO_INCREMENT
でid
を自動割り当てしてくれるようにする
add_data.php
今回のようにAUTO_INCREMENT
が有効になっているカラムにデータを挿入する際、次に割り当てられる値を取得する必要がある。
現在のカラムに入っている最大値のデータを取得してそれに+1するのも解決策ではあるかもだけど、4,5,6
みたいなデータがあったとき6
が削除されれば、次に挿入される値は5+1
の6
になってしまう。
それなら両方で使えるAUTO_INCREMENT
を使えるようにしておいた方が良いよね。
実際のコードもそこまで大きな変化はないし、難しいことはやってない。
**SHOW TABLE STATUS
**というテーブルの様々な情報が提示される構文を利用して、そこには次のAUTO_INCREMENT
で割り当てられる値が格納されているのでその情報を取得すればいいだけ。
<?php
date_default_timezone_set('Asia/Tokyo');
$days = date("Y/m/d H:i:s");
$db_link = mysqli_connect('localhost',ユーザー,パスワード,'auto_increment');
$show_table = "SHOW TABLE STATUS LIKE 'example';";
//userカラムに関する情報を取得
if($result = mysqli_query($db_link, $show_table)){
foreach ($result as $row) {
$row['Auto_increment'];
//AUTO_INCREMENTに関する情報を取得
//最初が大文字であることに注意
}
}
$add_id = $row['Auto_increment'];
?>
<!-- 中略 -->
<h2>データ追加</h2>
<form action="add_data_finish.php" method="post">
<p>ID<p>
<?php echo $add_id; ?>
<input type="hidden" name="add_id">
<p>NAME<p>
<!-- 以下略 -->

add_data_finish.php
このファイルで行うのは**INSERT
構文を使う時に、AUTO_INCREMENT
が適用されるようにクエリに指定するだけ
AUTO_INCREMENT
が適用されるのは、AUTO_INCREMENT
が適用されているカラムに値が指定されなかったとき
だから、今回はAUTO_INCREMENT
を指定しているid
にNULL
**を入れればいいだけ
<?php
$db_link = mysqli_connect('localhost',ユーザー,パスワード,'auto_increment');
$add_name = $_POST['add_name'];
$add_comment = $_POST['add_comment'];
$add_days = $_POST['add_days'];
$add_data = "INSERT INTO example VALUES ('NULL','$add_name','$add_comment','$add_days');";
//AUTO_INCREMENTが適用されているidの挿入箇所にNULLを宣言
mysqli_query($db_link,$add_data);
?>
<!-- 以下略 -->
おわりに
AUTO_INCREMENT
が使えればコードの短縮にも繋がるし、色々考えなくていいのは楽。
今後もこういった機能を見つけてどんどん成長していこう!