pdo 包装器真的太过分了吗? [关闭]

2024-03-07

我已经做了一些关于使用数据库包装器来处理我的数据的研究。 然而,我读过一些帖子,人们声称您不应该使用 PDO 作为数据库包装器,因为它已经是一个了。

也许是这样,但我仍然相信它有很多好处。

  1. 您可以在一个类中处理所有数据操作(增删改查),而不是分散在您的网站文件中。因此调试和处理错误要容易得多。
  2. 您可以轻松地使用另一个数据库类更改您的类。
  3. 您不必重复您的代码,只需调用数据库类中的代码即可
  4. 您可以选择通过例如日志记录、统计测试等来扩展该类。

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));

之所以这么说,是因为大多数创建 PDO 包装器的尝试确实是无助的,并且使事情变得比原始 PDO 更糟糕。
另外,人们编写包装器所依据的前提大多是错误的。

让我们看看你的:

您可以在一个类中处理所有数据,而不是分布在网站文件中。

很模糊的说法,没有什么特别的意思。当然,您可以在整个应用程序中处理数据,但不是使用原始 PDO,而是使用您自己的类。

您可以轻松地使用另一个数据库类更改您的类。

不过是错觉。您实际上不能坚持使用两个辅助方法 - 有时您需要使用原始 PDO 实例。

您不必重复您的代码,只需调用数据库类中的代码即可

这是非常正确的。但并不像任何其他 API 那样有用。

您可以选择扩展该类,例如日志记录、统计测试

这是正确的——没有异议。

这比每次打开连接、执行 3 行代码然后关闭它要高效得多。

这是假的。Nobody每次打开连接时都会要求您执行 3 行代码并关闭它。即使使用原始 PDO 连接也仅打开一次。

但是,您的实施非常好。它并没有给原始 PSO 添加太多(实际上,它仅将重复次数缩短了一行),但仍然是明智的。所以 - 我认为这种方法相当成功。

一些建议:

  1. 将数据库凭据存储为类属性确实没有意义。它们仅在构造函数中需要,其他地方都不需要
  2. 为什么不在构造函数中直接创建连接,而不需要额外的方法?
  3. 公共函数 getOne() 将是您的集合中不可或缺的补充。
  4. 您需要将 $connection 公开 - 至少在您使 PDO 和 PDOstatement 中的所有方法都可用之前
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pdo 包装器真的太过分了吗? [关闭] 的相关文章

  • 提交ajax表单并停留在同一页面不起作用

    我想将用户的评论存储在我的数据库中 当用户提交时 我不想将他们重定向到新页面 我有以下代码 但它不起作用 我的 HTML 代码
  • 将 jQuery 数组字符串转换为 PHP 数组

    首先 我得说我对 PHP 还很陌生 我正在尝试获取一个可以使用 foreach 的 PHP 对象 以下字符串通过 ajax 传递 我正在尝试转动以下字符串 menu title TEST1 href title TEST2 href QWE
  • 如何为 Lumen 的封闭路线指定路线名称?

    您好 我有以下流明路线 router gt get end function Illuminate Http Request request use router controller router gt app gt make App H
  • 基于 PHP 的 CSV 编辑器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道用 PHP 编写的在线 CSV 编辑器允许用户打开 编辑和保存给定的 CSV 文件 我能找到的只
  • 在 symfony2 中为特定控制器设置 max_execution_time

    Using ini set 我可以扩展最大执行时间一个脚本的 在Symfony2 我可以添加ini set to web app php and web app dev php将增加的执行时间应用于所有控制器 但在这种情况下 我只想扩展最大
  • Symfony php.ini Debian

    我在 Oracle VM VirtualBox 上使用 Debian 7 amd64 LAMP 服务器 我正在尝试安装 Symfony 但遇到了一些小问题 当我运行命令时 php my project name app check php
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • 如何在 PHP 中正确分割路径

    执行以下操作的最佳方法是什么 我通过 AJAX 请求获取路径 e g dir1 dir2 dir3 dir4 我需要在我的网页上这样展示它 dir1 gt gt dir2 gt gt dir3 gt gt dir4 它们每个都是 html
  • 如何从字符串中只获取数字? [复制]

    这个问题在这里已经有答案了 我有这样的字符串 第 001 课 完成 在这种情况下 我只想获取数字部分001 我试过这个 str the title preg match all d str matches number implode ma
  • 如何将 ctype_alpha 与 UTF-8 结合使用

    如何将 ctype alpha 与 UTF 8 一起使用 我有这个代码 if empty POST false if isset POST first name empty POST first name if ctype alpha PO
  • 适用于 Windows 的 PHP 支持的 GUI 应用程序

    我知道 PHP 是一种解释性语言 对于基于 Web 的事物来说 不是为在实际操作系统上运行 GUI 应用程序而设计的 但是有没有办法呢 基本上 是否有一个框架 系统允许我创建 本机 基本上是二进制文件 exe 看起来像带有本机控件和所有内容
  • 如何在javascript中使用自动递增id?

  • WooCommerce:用文本覆盖购物车价格

    我们有很多产品具有以下功能 No price 零价格 我们让它们可以通过内置挂钩购买 但购物车仍然将它们显示为具有0 price结账时 我们希望购物车和结帐摘要显示 特殊订单 或任何其他文本 但 WooCommerce 似乎使基于文本的价格
  • cURL '格式错误的网址'

    This url 在浏览器中工作得很好 但 cURL 返回错误 3 格式错误的 url 关于解决方法有什么想法吗 EDIT 卷曲代码 function get web page url options array CURLOPT RETUR
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • ZF2 工厂获取参数

    我有一个动态类别导航 在导航工厂中 我想从路线获取参数 我怎样才能做到这一点 在我看来 在我的 module php 中 public function getServiceConfig return array factories gt
  • 解析 PHP 响应:未捕获的语法错误:意外的标记 <

    我正在使用 AJAX 来调用 PHP 脚本 我唯一需要从响应中解析的是脚本生成的随机 ID 问题是 PHP 脚本会引发许多错误 这些错误实际上很好 不会妨碍程序功能 唯一的问题是当我跑步时 parseJSON response I get
  • 从多个选择列表中插入数据到mysql数据库(html形式)

    我制作了一个表格 其中有商店的 ID
  • 转换MAC地址格式

    我刚刚编写了一个小脚本 从交换机中提取数百个 MAC 地址进行比较 但它们的格式为 0025 9073 3014 而不是标准的 00 25 90 73 30 14 我对如何转换它感到困惑 我能想到的最好的办法就是在 处将它们分解成碎片 然后
  • WordPress 事件按元生效日期排序

    我在获取参数数组以按 Wordpress 中的日期对事件列表进行排序时遇到一些问题 我在 Stack Overflow 和其他地方找到了几个建议的解决方案 但经过大量的试验和错误后 这些解决方案似乎都不起作用 这没什么花哨的 而且应该比这容

随机推荐