我已经做了一些关于将datawrapper用于我的数据的研究.但是,我读了一些帖子,人们声称你不应该将PDO用于数据库包装器,因为它已经是一个.
可能是这样,但我仍然相信它有很多好处.
例:
<?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;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
您可以调用get()并传递查询和一些可选参数,而不是不断重复检索数据的所有步骤.这比每次打开连接,执行3行代码并关闭它更有效.
$db->get("select * from user where id = ?",array(1));
Run Code Online (Sandbox Code Playgroud)
据说是因为大多数创建PDO包装器的尝试确实无能为力,并且比使用原始PDO更糟糕.
还有一个前提,一个是根据它来编写包装,大多是错误的.
我们带你的:
您可以在一个类中处理所有数据,而不是分布在您的网站文件中.
相当模糊的陈述,没有特别的意义.当然,您在整个应用程序中处理您的数据,但使用的不是原始PDO,而是使用您自己的类.
您可以轻松地使用其他数据库类更改您的类.
但是一种妄想.您实际上无法坚持使用两种辅助方法 - 有时您需要使用原始PDO实例.
您不必重复代码,只需调用数据库类中的代码即可
这个是真的.但与其他任何API一样没用.
您可以选择使用例如日志记录,统计测试来扩展该类
这是正确的 - 没有异议.
这比每次打开连接,执行3行代码并关闭它更有效.
这是假的.没有人问你每次打开一个连接,执行3行代码,并将其关闭.即使原始PDO连接只打开一次.
但是,您的实施非常好.它不会给原始PSO增加太多(实际上,它只会将重复时间缩短一行)但仍然是明智的.所以 - 我称这种方法相当成功.
一些建议: