PHPプログラミング

最終更新日:
公開日:

レシピ

データベース MySQL / MariaDB

mysqliでMySQL/MariaDBにテーブルを作成:CREATE TABLE

MySQLiクラスのオブジェクトや関数を使って、MySQL / MariaDBのデータベースに新しくテーブルを作成する方法について解説します。

この記事のポイント

  • MySQL/MariaDBのデータベースに新しくテーブルを作成する
  • テーブルを作成するときにプリペアドステートメントを使う
  • オブジェクト、または関数(手続き型)を使う2通りの方法を解説

目次

MySQL/MariaDBのデータベースに新しくテーブルを作成する

今回はMySQLiクラスのオブジェクトや関数を使って、MySQL/MariaDBのデータベースに以下のようなテーブルを作成します。

テーブル名:user
カラム名その他
idINT(11)AUTO INCREMENT、主キー
nameVARCHAR(20)
genderTINYINT(3)UNSIGNED
ageTINYINT(3)UNSIGNED
modify_datetimeDATETIME
create_datetimeDATETIME

MySQLiクラスのオブジェクトを使う方法と、mysqli系の関数(手続き型)を使う2種類の方法をご紹介します。
いずれの方法も、MySQL/MariaDB共通で使用できます。

なお、データベースの接続について詳しくは「mysqliを使ってMySQL/MariaDBのデータベースへ接続」をご覧ください。

オブジェクトを使った書き方

まずはMySQLiクラスのオブジェクトを使った書き方を解説していきます。

index.php

// データベースと接続
$mysqli = new mysqli( 'host', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

// プリペアドステートメントの準備
$stmt = $mysqli->prepare('CREATE TABLE user (
	id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	name varchar(20),
	age tinyint(3) UNSIGNED,
	gender tinyint(3) UNSIGNED,
	modify_datetime datetime,
	create_datetime datetime
) engine=innodb default charset=utf8');

// プリペアドステートメントを実行
$stmt->execute();

// データベースとの接続解除
$mysqli->close();

最初の6行目はデータベースに接続するコードです。
MySQLiクラスのオブジェクトを作成するときにデータベースへの接続情報を渡して作成します。
もし接続に失敗した場合は4行目のif文に入り、エラー内容を出力します。

データベースに接続

// データベースと接続
$mysqli = new mysqli( 'host', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

続いて、prepareメソッドを使ってプリペアドステートメントを実行する準備を行います。
ここでテーブルを作成するSQL「CREATE TABLE」を記述します。

テーブル名に続く括弧「(」内では新しく作成するテーブルの構造を記述します。
その後に続く「engine=innodb default charset=utf8」は、テーブルが使用する「データベースエンジン」と「文字コード」の指定です。

プリペアドステートメントの準備

// プリペアドステートメントの準備
$stmt = $mysqli->prepare('CREATE TABLE user (
	id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	name varchar(20),
	age tinyint(3) UNSIGNED,
	gender tinyint(3) UNSIGNED,
	modify_datetime datetime,
	create_datetime datetime
) engine=innodb default charset=utf8');

prepareメソッドはステートメントオブジェクトを返すため、変数$stmtに入れます。
もしエラーが発生したときはオブジェクトの代わりにfalseが入ります。

続いて、準備したプリペアドステートメントをexecuteメソッドを使って実行します。

プリペアドステートメントを実行

// プリペアドステートメントを実行
$stmt->execute();

実行に成功すると、次のようなuserテーブルが作成されます。

userテーブル

+-----------------+---------------------+------+-----+---------+----------------+
| Field           | Type                | Null | Key | Default | Extra          |
+-----------------+---------------------+------+-----+---------+----------------+
| id              | int(11) unsigned    | NO   | PRI | NULL    | auto_increment |
| name            | varchar(20)         | YES  |     | NULL    |                |
| age             | tinyint(3) unsigned | YES  |     | NULL    |                |
| gender          | tinyint(3) unsigned | YES  |     | NULL    |                |
| modify_datetime | datetime            | YES  |     | NULL    |                |
| create_datetime | datetime            | YES  |     | NULL    |                |
+-----------------+---------------------+------+-----+---------+----------------+

executeメソッドは正常に実行するとtrue、失敗するとfalseを返します。

最後に、closeメソッドでデータベースとの接続を解除して終了します。

データベースとの接続解除

// データベースとの接続解除
$mysqli->close();

以上がMySQLiクラスのオブジェクトを使ったテーブル作成の方法です。

mysqli系の関数(手続き型)を使った書き方

続いて、mysqli系の関数(手続き型)を使ってテーブルを作成する方法です。
基本的な流れと作成するテーブルは上記のオブジェクトを使う方法と変わりありません。

index.php

// データベースと接続
$db_link = mysqli_connect( 'host', 'user_name', 'password', 'database_name');

if( mysqli_connect_errno() ) {
	echo mysqli_connect_errno() . ' : ' . mysqli_connect_error();
}

// プリペアドステートメントの準備
$stmt = mysqli_prepare( $db_link, 'CREATE TABLE user_oaky (
	id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	name varchar(20),
	age tinyint(3) UNSIGNED,
	gender tinyint(3) UNSIGNED,
	modify_datetime datetime,
	create_datetime datetime
) engine=innodb default charset=utf8');

// プリペアドステートメントを実行
mysqli_stmt_execute($stmt);

// データベースとの接続解除
mysqli_close($db_link);

最初の6行はデータベースへの接続コードです。

データベースに接続

// データベースと接続
$db_link = mysqli_connect( 'host', 'user_name', 'password', 'database_name');

if( mysqli_connect_errno() ) {
	echo mysqli_connect_errno() . ' : ' . mysqli_connect_error();
}

mysqli系の関数を使う場合はデータベースの接続情報を表すオブジェクトを変数で保持し、他のmysqli系関数を実行するときに渡す必要があります。
今回は変数$db_linkに入れています。

続いて、mysqli_prepare関数にテーブル作成のSQLを渡してプリペアドステートメントを実行する準備をします。
SQLは先述したMySQLiクラスのオブジェクトのときと全く同じ内容です。

関数を実行するとステートメントオブジェクトが返されるので、これを変数$stmtに入れます。

プリペアドステートメントの準備

// プリペアドステートメントの準備
$stmt = mysqli_prepare( $db_link, 'CREATE TABLE user_oaky (
	id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
	name varchar(20),
	age tinyint(3) UNSIGNED,
	gender tinyint(3) UNSIGNED,
	modify_datetime datetime,
	create_datetime datetime
) engine=innodb default charset=utf8');

続くmysqli_stmt_execute関数を実行してテーブルを作成します。
この関数では引数にステートメントオブジェクトを渡します。

プリペアドステートメントを実行

// プリペアドステートメントを実行
mysqli_stmt_execute($stmt);

最後に、データベースとの接続を解除して終了です。
mysqli_close関数でも解除する接続を特定するために、mysqli_prepare関数と同様にデータベースハンドラを渡します。

データベースとの接続解除

// データベースとの接続解除
mysqli_close($db_link);

以上がmysqli系の関数(手続き型)を使ってテーブルを作成する方法です。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。