私は自分のデータにdatabasewrapperを使用することに関するいくつかの研究を行ってきました。 しかし、私は、すでに1つであるため、データバスラッパーにPDOを使用すべきではないと人々が主張している記事を読んでいます。pdoラッパーは本当に過剰ですか?
そうかもしれませんが、私はまだそれが多くの利点を持っていると確信しています。
- すべてのデータアクション(クラッド)は、1つのクラスで処理され、Webサイトファイルには分散されません。したがって、エラーをデバッグして処理する方がはるかに簡単です。
- 別のデータバークラスを使用してクラスを簡単に変更できます。 :あなただけのオプションでは、例えば、ロギング、統計テスト、...
例えば持つクラスを拡張することができます
<?php
class Database
{
public $connection;
private $host = "";
private $username = "";
private $password = "";
private $dbname = "";
public function __construct(){
$this->connection = new PDO("mysql:host=$this->host;dbname=$this->dbname",$this->username,$this->password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function insert($query, array $data){
$this->connection->prepare($query)->execute($data);
return $this->connection->lastInsertId();
}
public function update($query, array $data) {
$stmt = $this->executeQuery($query,$data);
return $stmt->rowCount();
}
public function delete($query, array $data) {
$stmt = $this->executeQuery($query,$data);
return $stmt->rowCount();
}
public function findOne($query, array $data = null){
$stmt = $this->executeQuery($query,$data);
return $stmt->fetchObject();
}
public function findMany($query, array $data = null){
$stmt = $this->executeQuery($query,$data);
return($stmt->fetchAll(PDO::FETCH_OBJ));
}
public function executeQuery($query,$data = null){
$stmt = $this->connection->prepare($query);
$stmt->execute($data);
return $stmt;
}
}
?>
データを取得するためのすべての手順を常に繰り返す代わりに、get()を呼び出してクエリといくつかのオプションのパラメータを渡すことができます。 毎回接続を開くよりもずっと効率的です.3行のコードを実行して閉じてください。
$db->get("select * from user where id = ?",array(1));
「すべてのステップ...」 - 本当に多くのことがありますか? PDOでは 'foreach($ pdo-> query(...)$ row)'と書くことができます。これは準備ができていない文の場合とほとんど同じです。データベースとのやりとりは高価で、「場所を選ばず」ではなく、非常に特定の方法でしか始まらないはずです。なぜなら、なぜそれが常に1行で起こらなければならないのか分かりません。 – deceze
場所のいたるところではなく、非常に特定の方法ではどういう意味ですか? –
MVC、懸念事項の分離。モデルレイヤーには、データベースからデータを取得する場所がいくつかあります。例えば。 'UserService :: getAllActiveUsers()'または 'PostService :: updatePost($ id、array $ data)'を呼び出します。これらの方法の唯一の仕事は、特定の方法でデータベースと対話することです。内部では、必要に応じて適切なデータベースクエリに多くの行を費やす必要があります。単一の行にする利点はありません。このような「シンプルなラッパー」を使用すると、一度これらの中心的なメソッドを作成するのではなく、その場でアドホックからデータベースをクエリすることを誘惑するだけです。 – deceze