首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何包装PDO类?

如何包装PDO类?
EN

Stack Overflow用户
提问于 2019-06-24 09:11:08
回答 2查看 186关注 0票数 0

我需要将PDO类包装到新的类中。问题是包装后某些方法无法访问其他方法。在下面的代码。它封装查询以执行try、catch和返回错误。但是,在我包装了那个查询方法之后。我不能在PDO方法之后调用任何。就像fetchAll和其他。

代码语言:javascript
运行
复制
class aegis{
    private $init, $dsn, $user, $pass;
    private $options = [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_CASE => PDO::CASE_NATURAL,
        PDO::ATTR_ORACLE_NULLS => PDO::NULL_EMPTY_STRING  
    ];
    private $error = [];

    public function __construct($host, $port, $db_name, $user, $pass){
        $this->dsn = 'mysql:host='.$host.';port='.$port.';dbname='.$db_name;
        $this->user = $user;
        $this->pass = $pass;
        $this->connect();
    }

    private function connect(){
        try{
            $this->init = new PDO($this->dsn, $this->user, $this->pass, $this->options);
        }catch(PDOException $e){
            if(isset($e)){
                array_push($this->error, $e->getCode());
                array_push($this->error, $e->getMessage());
                array_push($this->error, time());
            }
        }
    }

    public function query($sqlStatement){
        if(isset($this->init)){
            try{
                $this->init->query($sqlStatement);
            }catch(PDOException $e){
                if(isset($e)){
                    array_push($this->error, $e->getCode());
                    array_push($this->error, $e->getMessage());
                    array_push($this->error, time());
                }else{
                   return $this->init->query($sqlStatement);
                }
            }
        }
    }

    public function close(){
        $this->init = NULL;
    }

    public function logError(){
        return $this->error;
    }
}

$aegis = new aegis($host, $port, $db_name, $user, $pass);

$rows = $aegis->query("SELECT `market` FROM `result`")->fetchAll();

foreach($rows as $row){
    echo $row.'<br>';
}
EN

Stack Overflow用户

发布于 2019-06-24 09:23:37

我需要将PDO类包装到新的类中。

实际上,您没有,您的类有太多的问题,并且提供的内容太少,以至于原始的PDO并没有真正的理由选择这个类而不是原始的PDO。了解如何首先使用PDO (准备语句),然后尝试创建一个简单的包装器。下面是我写的一篇文章,它是基于这里询问的数百个类似的关于堆栈溢出,你的第一个数据库包装器的童年疾病的问题而写的,它将帮助您完成包装。但是现在--再说一遍--只需按原样使用PDO。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56733312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档