PHP アドバンス

PHP MySQL テーブルの作成

1. MySQLiとPDOを使用したMySQLテーブルの作成

MySQLでテーブルを作成するには、SQLコマンドの CREATE TABLE を使用します。
データベースのテーブルは、カラム(列/Columns)とレコード(行/Rows)で構成されます。

ここでは、"id"、"firstname"、"lastname"、"email"、"reg_date" の5つのカラムを持つ "MyGuests" という名前のテーブルを作成します。

CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)

1.1 上記SQLの解説

各カラムのデータ型(Data type)INT(6)VARCHAR(30) など)は、そのカラムがどのような種類のデータを保持できるかを指定します。

データ型の後には、各カラムに対して以下のオプション属性を指定できます:

  • UNSIGNED - 数値型に使用され、保存されるデータを正の数とゼロに制限します。
  • AUTO_INCREMENT - 新しいレコードが追加されるたびに、MySQLがフィールドの値を自動的に 1 ずつ増やします。
  • PRIMARY KEY - テーブル内のレコードを一意に識別するために使用されます。PRIMARY KEY が設定されたカラムは多くの場合 ID 番号であり、AUTO_INCREMENT と組み合わせて使用されます。
  • NOT NULL - 各レコードはそのカラムに値を含める必要があり、null 値は許可されません。
  • DEFAULT - 他の値が渡されなかった場合に設定されるデフォルト値を指定します。

各テーブルにはプライマリキー(Primary Key)カラム(この例では "id" カラム)が必要です。その値はテーブル内の各レコードにおいて一意(ユニーク)でなければなりません。

       注: MySQLテーブルを作成するには、CREATE 権限が必要です。

2. MySQLi オブジェクト指向での実装例

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// 接続の作成
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続の確認
if ($conn->connect_error) {
  die("接続に失敗しました: " . $conn->connect_error);
}

// テーブル作成用のSQL
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";

if ($conn->query($sql) === TRUE) {
  echo "テーブルが正常に作成されました";
} else {
  echo "テーブル作成エラー: " . $conn->error;
}

$conn->close();
?>

3. MySQLi 手続き型での実装例

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// 接続の作成
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 接続の確認
if (!$conn) {
  die("接続に失敗しました: " . mysqli_connect_error());
}

// テーブル作成用のSQL
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";

if (mysqli_query($conn, $sql)) {
  echo "テーブルが正常に作成されました";
} else {
  echo "テーブル作成エラー: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

4. PDOでの実装例

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // PDOのエラーモードを例外に設定
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
  die("接続できませんでした。 " . $e->getMessage());
}

try {
  // テーブル作成用のSQL
  $sql = "CREATE TABLE MyGuests (
  id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  firstname VARCHAR(30) NOT NULL,
  lastname VARCHAR(30) NOT NULL,
  email VARCHAR(50),
  reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  )";

  // exec() を使用。結果が返されないため
  $conn->exec($sql);
  echo "テーブルが正常に作成されました";
} catch(PDOException $e) {
  echo "テーブル作成エラー: " . $sql . "<br>" . $e->getMessage();
}

$conn = null;
?>