几天前我开始学习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']);
这段代码还没有完成,这只是我的开始想法我怎么能做到这一点。我很想听听你的想法,如果值得的话,那有可能吗?谢谢:)
暂无答案!
目前还没有任何答案,快来回答吧!