PHPプログラミング

最終更新日:
公開日:

レシピ

データベース SQLite

SQLiteにデータを登録する:INSERT

SQLiteのテーブルへ新しくデータを登録する方法について解説します。

この記事のポイント

  • SQLiteのデータベースに新しくデータを登録する
  • データを登録する方法はSQLite3クラスを使う方法、PDOを使う方法がある
  • データを登録するときはプリペアドステートメントを使う

目次

データを登録する

SQLiteのデータベースにあるテーブルへデータを登録する方法について、SQLite3クラスを使う方法とPDOを使う方法をそれぞれ解説します。

今回は次のようなテーブルがすでにあることを前提に進めていきます。

テーブル名:test_table
カラム名その他
idINTEGERPRIMARY KEY
nameTEXTNOT NULL
ageINTEGERNOT NULL
createdTIMESTAMPDEFAULT (datetime(CURRENT_TIMESTAMP,’localtime’))

テーブルの作成方法については、「SQLiteにテーブルを作成する:CREATE TABLE」をご覧ください。

SQLite3クラスでデータを登録する

まずはSQLite3クラスを使って、SQLiteのデータベースに新しくデータを登録する方法を解説します。

以下のコードでは(1)登録する値を用意し、(2)データベースに接続して(3)SQL作成、そして(4)プリペアドステートメントによる登録の準備、(5)登録実行、(6)データベースの接続解除という流れになっています。

index.php

<?php

// (1)登録するデータを用意
date_default_timezone_set('Asia/Tokyo');
$name = '山田';
$age = 30;
$created = date('Y-m-d H:i:s');

// (2)データベースに接続
$db = new SQLite3("./sqlite/test.db");

// (3)SQL作成&プリペアドステートメントの準備
$stmt = $db->prepare("INSERT INTO test_table(
	name, age, created
) VALUES (
	:name, :age, :created
)");

// (4)プリペアドステートメントを実行
$stmt->bindValue( ':name', $name, SQLITE3_TEXT);
$stmt->bindValue( ':age', $age, SQLITE3_INTEGER);
$stmt->bindValue( ':created', $created, SQLITE3_TEXT);

// (5)データの登録を実行
$res = $stmt->execute();

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

(3)のSQLを作成するタイミングでは、値をSQLに直接記入せずに「:name」のようにプレースホルダーを記述します。
プレースホルダーへの値のセットは(4)のbindValueメソッドを使って実行します。
プリペアドステートメントを使わない方法ももちろんありますが、SQLインジェクション対策含めて安全性の観点から使用するようにした方が無難です。

bindValueメソッドの第1パラメータは値をセットする先のプレースホルダー、第2パラメータはセットする値、そして第3パラメータはセットする値の型を用意された定数で指定します。
値の型については、以下の5種類から該当する定数を指定してください。

定数名値の型
SQLITE3_INTEGER整数(値の大きさに応じて1,2,3,4,6,8バイトで格納)
SQLITE3_FLOAT浮動小数点数(8バイトのIEEE浮動小数点数値で格納)
SQLITE3_TEXT文字列(データベースのエンコーディングで格納)
SQLITE3_BLOBblobデータ(入力をそのままの形式で格納)
SQLITE3_NULLNULL

ここまではデータを登録する準備を行ってきました。
(5)でexecuteメソッドを実行すると、データの登録が実行されます。

なお、PRIMARY KEYが設定されているidカラムはデータの登録が成功すると自動連番が挿入されます。
以前に登録したデータがある場合は、最後に自動挿入された連番に続く数値が入ります。

最後に(6)でデータベースとの接続を解除して終了します。

PDOでデータを登録する

続いて、PDOを使ってSQLiteのデータベースに新しくデータを登録する方法を解説します。

全体的な流れはSQLite3クラスを使ったときと同様です。

index.php

<?php

// (1)登録するデータを用意
date_default_timezone_set('Asia/Tokyo');
$name = '山田';
$age = 30;
$created = date('Y-m-d H:i:s');

// (2)データベースに接続
$pdo = new PDO('sqlite:./sqlite/test.db');

// (3)SQL作成&プリペアドステートメントの準備
$stmt = $pdo->prepare("INSERT INTO test_table (
	name, age, created
) VALUES (
	:name, :age, :created
)");

// (4)登録するデータをセット
$stmt->bindParam( ':name', $name, PDO::PARAM_STR);
$stmt->bindParam( ':age', $age, PDO::PARAM_INT);
$stmt->bindParam( ':created', $created, PDO::PARAM_STR);

// (5)SQL実行
$res = $stmt->execute();

// (6)データベースの接続解除
$pdo = null;

(4)のプリペアドステートメントでプレースホルダーに値をセットするときに、第3パラメータで指定する型の定数名はPDO用のものに置き換わります。

以上、SQLiteのデータベースへのデータを登録する方法でした。