最終更新日:
公開日:
レシピ
データベース MySQL / MariaDB
mysqliでMySQL/MariaDBにテーブルを作成:CREATE TABLE
MySQLiクラスのオブジェクトや関数を使って、MySQL / MariaDBのデータベースに新しくテーブルを作成する方法について解説します。
この記事のポイント
- MySQL/MariaDBのデータベースに新しくテーブルを作成する
- テーブルを作成するときにプリペアドステートメントを使う
- オブジェクト、または関数(手続き型)を使う2通りの方法を解説
目次
MySQL/MariaDBのデータベースに新しくテーブルを作成する
今回はMySQLiクラスのオブジェクトや関数を使って、MySQL/MariaDBのデータベースに以下のようなテーブルを作成します。
カラム名 | 型 | その他 |
---|---|---|
id | INT(11) | AUTO INCREMENT、主キー |
name | VARCHAR(20) | |
gender | TINYINT(3) | UNSIGNED |
age | TINYINT(3) | UNSIGNED |
modify_datetime | DATETIME | |
create_datetime | DATETIME |
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系の関数(手続き型)を使ってテーブルを作成する方法です。