前ページではデータの操作クラスが2つあると説明し、その内のデータベースへの接続を行うConnectModelクラスについて説明しましたが今回はデータベースのデータを操作するExecuteModelクラスについて説明します。
ExecuteModelクラスは基本機能のみを備えた抽象クラス
アプリケーション側で自由にSQL文を発行できるように抽象クラスにします。余談ですが、最近のフレームワークの中にはSQL文を書かなくてもデータベースのデータを操作できるものもあり、それに慣れている人の中にはSQL文を知らない人もいます。SQL文は知っておいて絶対損はないので覚えておいたほうがいいでしょう。
ここでは基本機能として以下の機能を実装します。
- PDOオブジェクトをsetPdoメソッドに渡す
- PDOオブジェクトをプロパティに登録する(setPdoメソッド)
- SQLのクエリを発行する(executeメソッド)
- クエリの結果を全て取得する(getAllRecordメソッド)
- クエリの結果を1行だけ取得する(getOneRecordメソッド)
PDOオブジェクトをsetPDO()に渡す
パラメーターでPDOオブジェクトを受け取り、それを引数にsetPDO()メソッドを呼び出します。これはコンストラクターで行います。
<?php
abstract class ExecuteModel {
public function __construct($pdo) {//$pdoはPDOオブジェクト
$this->setPdo($pdo);//setConnect()メソッドに引数として渡す
}
}
PDOオブジェクトをプロパティに登録する(setPdoメソッド)
PDOオブジェクトをプロパティに登録するsetPdoメソッドを登録します。先程のコンストラクター内で呼び出しているメソッドです。コンストラクター等は省略してます。
protected $_pdo;
public function setPdo($pdo){
$this->_pdo = $pdo;
}
SQLのクエリを発行する(executeメソッド)
プリペアドステートメントを使用して発行するメソッドを定義します。
アプリケーション側で呼び出す際に、SQL文と連想配列が渡されてきますので受け取ります。
$parameterにはプレースホルダーと値を連想配列で受け取るためのパラメーターです。
public function execute($sql, $parameter = array()){
$stmt = $this->_pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute($parameter);//SQLクエリを実行
return $stmt;//PDOstatement、実行結果を返します。
}
クエリの結果を全て取得する(getAllRecordメソッド)
プリペアドステートメントで実行されたSQLクエリの結果は、結果セットというオブジェクトが返ってくるのですが、その中から欲しい情報を受け取ります。ここでは全て取得するgetAllReordメソッドを定義するので、PDOstatementのfetchAll()メソッドを使用します。
public function getAllRecord($sql, $parameter = array()) {
$all_record = $this->execute($sql, $parameter)->fetchAll(PDO::FETCH_ASSOC);
return $all_rec;
}
クエリの結果を1行だけ取得する(getOneRecordメソッド)
さっきとは別で、1行分だけレコードを取得するメソッドを定義します。
public function getOneRecord($sql, $parameter = array()){
$record = $this->execute($sql, $parameter)->fetch(PDO::FETCH_ASSOC);
return $record;
}
ExecuteModelクラスのまとめ(コード)
<?php
abstract class ExecuteModel {
protected $_pdo;
public function __construct($pdo) {//$pdoはPDOオブジェクト
$this->setPdo($pdo);//setConnect()メソッドに引数として渡す
}
public function setPdo($pdo){
$this->_pdo = $pdo;
}
public function execute($sql, $parameter = array()){
$stmt = $this->_pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
$stmt->execute($parameter);//SQLクエリを実行
return $stmt;//PDOstatement、実行結果を返します。
}
public function getAllRecord($sql, $parameter = array()) {
$all_record = $this->execute($sql, $parameter)->fetchAll(PDO::FETCH_ASSOC);
return $all_rec;
}
public function getOneRecord($sql, $parameter = array()){
$record = $this->execute($sql, $parameter)->fetch(PDO::FETCH_ASSOC);
return $record;
}
}
コメント