5分で実装:SQLite編「しばらくやってないと忘れるPDOでアクセスしてクエリ実行」
DBアクセスは当然PDO(データベース抽象化レイヤクラス)を使います。
SQLiteの場合、Oracleと違って複数のテーブルにINSERTできないので、リレーションなんかの時に別テーブルに入れるidだけを取出したい場合なんかがあります。
そんなとき一回だけクエリ実行したい時にはPDOクラスの場合”query”メソッドを使用します。
$sql = "SELECT max(id) from tbl_hoge"; $stmt = $pdo->query($sql);
実行してデータを受取る場合は以下の3通りがあります。
・クエリ内で指定したカラム名で取得する場合はPDO::FETCH_ASSOCステートメントを指定
$id_data = $stmt->fetch(PDO::FETCH_ASSOC); //データ表示 print($id_data['max(id)']);//'max(id)'は最新のidの値を取得する
・SELECT文で指定したカラム名順の配列の添字指定で取得する場合はPDO::FETCH_NUMステートメントを指定
$id_data = $stmt->fetch(PDO::FETCH_NUM) //データ表示 print($id_data[0]);
・PDO::FETCH_BOTHステートメントを指定した場合は、上記の2パターンどちらでも表示が可能です。
・fetch() メソッドで引数を指定しなかった場合は「PDO::FETCH_BOTH」がデフォルトです。
また、クエリ実行の際は「try catch」の中で行い、PDOオブジェクトの例外をキャッチできるようにしておきましょう。
全体の流れとしては、
・定義ファイル(設定ファイルを作り、SQLiteのDBファイル置き場を定数定義しておくとよいでしょう)
<?php //configure.php define("DB_FILE", "sqlite:/hoge/fuga/DB/db_upickregi.sqlite"); ?>
・phpファイル内でクエリ実行
<?php //定義ファイルの読み込み require_once '/hoge/fuga/configure.php';//相対パス、絶対パスどちらでも $dsn = DB_FILE; try { $pdo = new PDO($dsn, '', '');//PDOオブジェクト生成 $sql_select = "SELECT * FROM tbl_hoge"; $exquery = $pdo->query($sql_select); //以下while文で取得したrowデータの数だけループ while ($val = $exquery->fetch(PDO::FETCH_NUM)){//クエリ実行後返される配列が$valに一行分/一回ごとに格納される //PDO::FETCH_NUMを指定したのでDBテーブルのカラムの順番に合わせて添字の数値を指定します $any_hoge = $val[0]; $any_fuga = $val[1]; } unset($pdo);//DBからの接続を断つためPDOオフジェクトを解放します } catch(PDOException $e) { $err = $e->getMessage(); } ?>
他には、INSERT文を実行するときはプレペアドステートメントを使って見た目もスッキリ可読性あげちゃってスマートなクエリ実行で。
<?php $pdo = new PDO($dsn,'',''); $sql = ‘INSERT INTO tbl_hoge VALUES(NULL, ?, ?)’; $stmt = $pdo->prepare($sql); $stmt->execute( array(8, 2) ); ?>
※ VALUESの先頭をNULLにしてるのは、SQLiteの場合、1カラム目のid(INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL)へのデータ挿入が自動的に最新の数値でインクリメントされるようにするためです。
※ execute()メソッド実行後はboolean型で成功か失敗かを受取れますので、if文で何らかの処理もできます。
たったこれだけでSQLiteデータベースにアクセスでき、データのやり取りをする事ができます。
いつも読んでくれてありがとね!