2
0

More than 3 years have passed since last update.

MySQL + phpMyAdminのデータベースでAUTO_INCREMENTを使ってみる

Posted at

はじめに

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

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

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

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>


追加したデータがlist.phpの一覧に表示されてたらOK

phpMyAdminでAUTO_INCREMENT設定

ここから本題
まずはphpMyAdminAUTO_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_INCREMENTidを自動割り当てしてくれるようにする

add_data.php

今回のようにAUTO_INCREMENTが有効になっているカラムにデータを挿入する際、次に割り当てられる値を取得する必要がある。
現在のカラムに入っている最大値のデータを取得してそれに+1するのも解決策ではあるかもだけど、4,5,6みたいなデータがあったとき6が削除されれば、次に挿入される値は5+16になってしまう。
それなら両方で使えるAUTO_INCREMENTを使えるようにしておいた方が良いよね。

実際のコードもそこまで大きな変化はないし、難しいことはやってない。
SHOW TABLE STATUSというテーブルの様々な情報が提示される構文を利用して、そこには次のAUTO_INCREMENTで割り当てられる値が格納されているのでその情報を取得すればいいだけ。

add_data.php
<?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を指定しているidNULLを入れればいいだけ

add_data_finish.php
<?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が使えればコードの短縮にも繋がるし、色々考えなくていいのは楽。
今後もこういった機能を見つけてどんどん成長していこう!

参考文献

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0