我已经做了一些关于使用数据库包装器来处理我的数据的研究。
然而,我读过一些帖子,人们声称您不应该使用 PDO 作为数据库包装器,因为它已经是一个了。
也许是这样,但我仍然相信它有很多好处。
- 您可以在一个类中处理所有数据操作(增删改查),而不是分散在您的网站文件中。因此调试和处理错误要容易得多。
- 您可以轻松地使用另一个数据库类更改您的类。
- 您不必重复您的代码,只需调用数据库类中的代码即可
- 您可以选择通过例如日志记录、统计测试等来扩展该类。
Example:
<?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));