最終更新日:
公開日:
レシピ
データベース PDO
PDOでテーブルを作成(CREATE TABLE)
PDOでデータベースにテーブルを作成する方法をMySQL、MariaDB、PostgreSQL、SQLiteの4種類のデータベースを使って解説します。
この記事のポイント
- PDOを使ってテーブルを作成する方法を確認する
- PDOでMySQL / MariaDB / PostgreSQL / SQLiteにテーブルを作成する方法を確認する
目次
PDOでテーブルを作成する
今回はデータベースにテーブルを作成する方法を解説していきます。
前提として、3種類のデータベースには全て「test」というデータベースがあり、次のuser_listテーブルを作成することとします。
カラム名 | 型 | その他 |
---|---|---|
id | 整数 | 主キー |
name | 文字列 | |
age | 整数 | |
registry_datetime | 日付(またはタイムスタンプ) |
なお、PDOの基本的な紹介については「PDOについて」を、データベースへの接続については「PDOを使ってデータベースへ接続」をご覧ください。
MySQL / MariaDBのデータベースにテーブルを作成
まずはMySQLとMariaDBのデータベースにテーブルを作成していきましょう。
この2つのデータベースは同じ方法が使用できるためまとめて解説していきます。
PDOのテーブル作成はSQL「CREATE TABLE」を実行して行います。
SQLを実行するにはqueryメソッドを使用します。
テーブル作成するqueryメソッドのコード例
// テーブル作成のSQLを作成
$sql = 'CREATE TABLE user_list (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
age INT(11),
registry_datetime DATETIME
) engine=innodb default charset=utf8';
// SQLを実行
$res = $dbh->query($sql);
テーブル作成に成功した場合はPDOStatementオブジェクトを、失敗した場合はbool値のfalseを返します。
上の例では$resに返り値を代入しています。
テーブルを作成するSQLについてはMySQL(MariaDB)に合わせた内容となります。
「CREATE TABLE」の基本的な構造は他のデータベースと共通ですが、データの「型」や「属性」の指定方法は扱うデータベースによって異なります。
例えば、MySQL(MariaDB)では主キーなどによく自動連番の整数を設定する「AUTO_INCREMENT」を指定することがあります。
しかしこの属性はPostgreSQLやSQLiteでは指定できないため、それぞれのデータベースに有効なSQLへと書き換えて対応します。
実践的なコード
テーブル作成のSQLと実行方法を確認したところで、実際にデータベース接続からテーブル作成を行い、接続解除するまでの流れをみていきましょう。
コード例
<?php
try {
// (1)データベースへ接続
$dbh = new PDO("mysql:host=127.0.0.1; dbname=test; charset=utf8", 'username', 'password');
// (2)テーブル作成のSQLを作成
$sql = 'CREATE TABLE user_list (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
age INT(11),
registry_datetime DATETIME
) engine=innodb default charset=utf8';
// (3)SQLを実行
$res = $dbh->query($sql);
} catch(PDOException $e) {
echo $e->getMessage();
die();
}
// (4)接続を解除
$dbh = null;
成功した時の返り値
object(PDOStatement)#2 (1) { ["queryString"]=> string(167) "CREATE TABLE user_list ( id INT(11) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20), age INT(11), registry_datetime DATETIME ) engine=innodb default charset=utf8" }
失敗した時の返り値
bool(false)
こちらのコードは次の順番に処理を行っています。
- (1)データベースへ接続
- (2)テーブル作成のSQLを作成
- (3)SQLを実行
- (4)接続を解除
try文で囲っていますが、SQLが原因でテーブル作成に失敗した場合はPDOExceptionのエラー(例外)は投げられません。
そのため、テーブル作成の成功/失敗についてはqueryメソッド実行後の$resに入っている値(PDOStatementオブジェクトかfalseか)を確認して行います。
以上がMySQLとMariaDBのデータベースにテーブルを作成する基本的な流れとなります。
PostgreSQLのデータベースにテーブルを作成
PostgreSQLデータベースへテーブルを作成していきましょう。
PDOのテーブル作成する流れはMySQLと全く同じ手順ですが、実行するSQLの内容が異なるため先に解説します。
テーブル作成のSQL
$sql = "CREATE TABLE user_list (
id serial PRIMARY KEY,
name varchar(50),
age int,
registry_datetime timestamp
)";
PostgreSQLではMySQLの「AUTO_INCREMENT」は指定できないため、代わりに「serial」を指定して自動連番を設定します。
また日付の型は「datetime」はないため、ここでは「timestamp」を指定しています。
続いて、こちらのSQLをPDOを使って実行していきます。
コード例
<?php
try {
// (1)データベースへ接続
$dbh = new PDO("pgsql:host=127.0.0.1; dbname=test;", 'username', 'password');
// (2)テーブル作成のSQLを作成
$sql = "CREATE TABLE user_list (
id serial PRIMARY KEY,
name varchar(50),
age int,
registry_datetime timestamp
)";
// (3)SQLを実行
$res = $dbh->query($sql);
} catch(PDOException $e) {
echo $e->getMessage();
die();
}
// (4)接続を解除
$dbh = null;
返り値は先述したMySQLと同じです。
以上がPostgreSQLデータベースへのテーブル作成の流れでした。
SQLiteのデータベースにテーブルを作成
最後にSQLiteへのテーブル作成方法を解説します。
SQLiteについてもSQLの内容だけが異なるため、先に変更点のみ解説します。
テーブル作成のSQL
$sql = 'CREATE TABLE user_list (
id INTEGER PRIMARY KEY,
name TEXT,
age INT,
registry_datetime TEXT
)';
SQLiteでは自動連番の整数を設定するには「INTEGER PRIMARY KEY」と指定することで設定可能です。
また、日付型(dateやdatetime)は存在しないため「text」を指定します。
以上のSQLを次のコードで実行し、テーブルを作成します。
コード例
<?php
try {
// (1)データベースへ接続
$dbh = new PDO("sqlite:./sqlite/test.sqlite3");
// (2)テーブル作成のSQLを作成
$sql = 'CREATE TABLE user_list (
id INTEGER PRIMARY KEY,
name TEXT,
age INT,
registry_datetime TEXT
)';
// (3)SQLを実行
$res = $dbh->query($sql);
} catch(PDOException $e) {
echo $e->getMessage();
die();
}
// (4)接続を解除
$dbh = null;
SQLiteについても返り値は上記2つのデータベースと同様です。
以上、SQLiteデータベースへのテーブル作成の流れでした。