我需要将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>';
}发布于 2019-06-24 09:23:37
我需要将PDO类包装到新的类中。
实际上,您没有,您的类有太多的问题,并且提供的内容太少,以至于原始的PDO并没有真正的理由选择这个类而不是原始的PDO。了解如何首先使用PDO (准备语句),然后尝试创建一个简单的包装器。下面是我写的一篇文章,它是基于这里询问的数百个类似的关于堆栈溢出,你的第一个数据库包装器的童年疾病的问题而写的,它将帮助您完成包装。但是现在--再说一遍--只需按原样使用PDO。
https://stackoverflow.com/questions/56733312
复制相似问题