PHP SQLiteへ接続してinsert/update/deleteするサンプル

PHPでSQLiteに接続してinsert/update/deleteするサンプルです。
(確認環境:PHP 7.2.8,SQLite 3.26.0,XAMPP 7.2.8,Windows 10)

目次

SQLの実行 insertのサンプル
  updateのサンプル
  deleteのサンプル
  プレースホルダ
環境 php.iniの設定
  接続先のデータベースとテーブル

insertのサンプル

SQLiteに接続してインサートを実行するサンプルです。

<?php
// DB接続情報
$dsn = 'sqlite:E:\dev\sqlite-test\test1.db';
//$username = '';
//$password = '';
$id = '4';
$name = '竹田';
$romaji = 'takeda';

// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$dbh = new PDO($dsn);

	// 静的プレースホルダを指定
	$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

	// DBエラー発生時は例外を投げる設定
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	// SQL文 「:名称」は、名前付きプレースホルダ
	$stmt = $dbh->prepare("INSERT INTO employee(id,name,romaji) VALUES (:id,:name,:romaji)");

	//トランザクション処理
	$dbh->beginTransaction();

	try{
		$stmt->bindParam(':id', $id);
		$stmt->bindParam(':name', $name);
		$stmt->bindParam(':romaji', $romaji);
		$stmt->execute();

		//コミット
		$dbh->commit();

	}catch (PDOException $e) {
		//ロールバック
		$dbh->rollback();
		throw $e; //
	}
	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));
}
?>

3行目は、SQLiteのデータベースの場所を指定しています。
4,5行目のユーザーとパスワードは、SQLiteにはありません。
23行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
29~31行目は、6~8行目の変数を23行目のプレースホルダにバインドしています。

updateのサンプル

SQLiteに接続してアップデートを実行するサンプルです。

<?php
// DB接続情報
$dsn = 'sqlite:E:\dev\sqlite-test\test1.db';
//$username = '';
//$password = '';
$name = '中田';
$romaji = 'nakata';
$id = 3;

// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$pdo = new PDO($dsn);

	// 静的プレースホルダを指定
	$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

	// DBエラー発生時は例外を投げる設定
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	// SQL文 「:名称」は、名前付きプレースホルダ
	$stmt = $pdo->prepare("UPDATE employee SET name=:name,romaji=:romaji WHERE id=:id");

	//トランザクション処理
	$pdo->beginTransaction();

	try{
		$stmt ->bindParam(':name', $name);
		$stmt ->bindParam(':romaji', $romaji);
		$stmt ->bindParam(':id', $id);
		$stmt->execute();

		//コミット
		$pdo->commit();

	}catch (PDOException $e) {
		//ロールバック
		$pdo->rollback();
		throw $e; //
	}
	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));
}
?>

3行目は、SQLiteのデータベースの場所を指定しています。
4,5行目のユーザーとパスワードは、SQLiteにはありません。
23行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
29~31行目は、6~8行目の変数を23行目のプレースホルダにバインドしています。

deleteのサンプル

SQLiteに接続して削除を実行するサンプルです。

<?php
// DB接続情報
$dsn = 'sqlite:E:\dev\sqlite-test\test1.db';
//$username = '';
//$password = '';

$id = 3;


// try-catch
try{
	// データベースへの接続を表すPDOインスタンスを生成
	$pdo = new PDO($dsn);

	// 静的プレースホルダを指定
	$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

	// DBエラー発生時は例外を投げる設定
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


	// SQL文 「:名称」は、名前付きプレースホルダ
	$stmt = $pdo->prepare("DELETE FROM employee WHERE id=:id");

	//トランザクション処理
	$pdo->beginTransaction();

	try{
		$stmt ->bindParam(':id', $id);
		$stmt->execute();

		//コミット
		$pdo->commit();

	}catch (PDOException $e) {
		//ロールバック
		$pdo->rollback();
		throw $e; //
	}
	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));
}
?>

3行目は、SQLiteのデータベースの場所を指定しています。
4,5行目のユーザーとパスワードは、SQLiteにはありません。
23行目は、名前付きプレースホルダを使用したSQLです。(:名称)の箇所が名前付きプレースホルダです。
29行目は、7行目の変数を23行目のプレースホルダにバインドしています。

プレースホルダ

  • SQLにある(:名称)は、名前付きプレースホルダです。
    →疑問符(?)のプレースホルダのやり方もあります。
  • 動的に値をセットできます。
  • 入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
  • 固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
  • place=場所、holder=入れものです。

リンク

以下はPHPマニュアルのPDOの接続、および接続の管理のリンクです。
https://php.net/manual/ja/pdo.connections.php

以下はPHPマニュアルのPDO::setAttributeのリンクです。
https://php.net/manual/ja/pdo.setattribute.php

以下はPHPマニュアルのPDO::begintransactionのリンクです。
https://php.net/manual/ja/pdo.begintransaction.php

php.iniの設定

上記コードを動かすためには、php.iniの;extension=pdo_sqliteのコメントのセミコロン(;)を削除します。変更した場合は、apahceを再起動します。
セミコロンがある場合、could not find driverと表示されます。

;extension=pdo_firebird
extension=pdo_mysql
;extension=pdo_oci
;extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
;extension=pgsql
;extension=shmop

接続先のデータベースとテーブル

接続先のデータベースとテーブルについては、以下を参照願います。

SQLiteのインストールとSQLを実行するサンプル

関連の記事

PHP SQLiteへ接続してselectするサンプル

△上に戻る