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

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

確認環境
・PHP 7.2.8
・XAMPP 7.2.8
・SQLite 3.26.0
・Windows 10

目次

SQLiteへ接続してselectする

SQLiteへ接続してselectするサンプルです。
プレースホルダを使用しています。

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

$id = 1; //プレースホルダの値を指定

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

	// SQL文 :idは、名前付きプレースホルダ
	$sql = "select * from syain where id = :id";

	// プリペアドステートメントを作成
	$stmt = $pdo->prepare($sql);

	// プレースホルダと変数をバインド
	$stmt -> bindParam(":id",$id);

	$stmt -> execute();

	// データを取得
	$rec = $stmt->fetch(PDO::FETCH_ASSOC);

	// 接続を閉じる
	//$pdo = null; スクリプト終了時に自動で切断されるので不要
}catch (PDOException $e) {
	// UTF8に文字エンコーディングを変換します
	exit(mb_convert_encoding($e->getMessage(),'UTF-8','SJIS-win'));
}
function escape1($str)
{
    return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>select</title>
</head>
<body >

<?php foreach ($rec as $a):?>
	<?=escape1($a)?>
<?php endforeach; ?>

</body>
</html>

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

プレースホルダ

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

htmlspecialchars関数

PDO::FETCH_ASSOC

(補足)1.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

(補足)2.接続先のデータベースとテーブルについて

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

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

関連の記事

SQL INSERT文のサンプル
SQL UPDATE文とDELETE文のサンプル
SQL 重複行を表示しないサンプル(distinct)
SQL 複数の行をまとめる(集約関数/group by/having)

△上に戻る