gpt4 book ai didi

php - 如何包装PDO类?

转载 作者:行者123 更新时间:2023-11-29 09:40:38 25 4
gpt4 key购买 nike

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

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>';
}

最佳答案

I need to wrap PDO class to the new class.

事实上,你不需要。您的类有太多问题,但提供的内容太少,以至于原始 PDO 没有,因此实际上没有任何理由比原始 PDO 更喜欢此类。首先了解如何使用 PDO(特别是准备好的语句),然后才尝试创建一个简单的包装器。这是我根据 Stack Overflow 上提出的数百个类似问题编写的文章,Your first database wrapper's childhood diseases ,它将帮助您制作 wrapper 。但目前 - 再次 - 只需按原样使用原始 PDO。

关于php - 如何包装PDO类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com