我可以使用定制的phpdb类简化pdo方法的过程吗?

vom3gejh  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(188)

几天前我开始学习php-oop,虽然我知道它的主要功能,但我决定让类名为 DB . 它将使用 PDO .
好吧,我没有发现任何与我想达到的目标类似的信息。这是本课程的主要目的:
存储数据库的所有示例和连接信息
能够要求一个包含所有已创建语句的文件
为每种可能的情况使用不同的方法,这样你就不必每次都写同样的东西了*

  • 我说“写同样的东西”的意思是你可以创造一些不同的方法:
public function prepareExecFetch() { ... }

public function prepareExec() { ... }

public function fetch() { ... }

不知何故,我想把这些函数和pdo方法连接起来,这样我就不需要为我创建的每一条语句一遍又一遍地写这些行了。 DB 类将使用单个方法处理这些内容,这取决于我想要实现的目标。
我尽量避免使用 DB :

$stmt1 = $pdo->prepare('...');
$stmt1->execute(array('...' => '...'));
$r1 = $stmt1->fetch(PDO::FETCH_ASSOC);

我的项目越来越大,所以,在我看来,每当我需要访问数据库中的一些信息时,就把这些代码行放进去是个糟糕的主意。
目前,我对php框架不感兴趣。在使用它们之前,我想了解它是如何工作的。
另外,你能给我一些关于我的书面代码的想法吗?

<?php
class DB {
    private $host;
    private $name;
    private $charset;
    private $user;
    private $password;

    // I wonder how could I store all the statements here, using the
    // $stmt1 = ...; $stmt2 = ...; wouldn't work cause it has to be
    // dymanic and I can't create new properties inside any method
    private $stmts = [];

    // Not using static modifier because if there was another instance of this
    // class, then $stmtCounter variable should be resetted again to 0
    private $stmtCounter = 0;

    public function __construct(string $host, string $name, string $charset,
                                string $user, string $password) {
        $this->host = $host;
        $this->name = $name;
        $this->charset = $charset;
        $this->user = $user;
        $this->password = $password;

        $pdo = new PDO('mysql:host=' . $this->host . '; dbname=' . $this->name . ';
                        charset=' . $this->charset, $this->user, $this->password);

        // While false, PDO will take advantage of the native prepared statement
        // functionality
        $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

        // In exception mode, if there is an error in SQL, PDO will throw
        // exceptions and the script will stop running
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);        
    }

    public function execPrepareFetch(string $stmt, array $execParams) {
        $this->stmtCounter++;
        array_push($this->stmts, $stmt . $this->stmtCounter);
    }
}

// This way by instantiating multiple instances we can easily work with multiple
//databases
$db = new DB(DB_HOST, DB_NAME, DB_CHARSET, DB_USER, DB_PASSWORD);
$db->execPrepareFetch('$stmt', [':user' => 'some value']);

这段代码还没有完成,这只是我的开始想法我怎么能做到这一点。我很想听听你的想法,如果值得的话,那有可能吗?谢谢:)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题