class MyPDO{
private $type;
private $host;
private $port;
private $dbname;
private $charset;
private $user;
private $pwd;
private $pdo;
private static $instance;
private function __construct($param) {
$this->initParam($param);
$this->initPDO();
$this->initException();
}
private function __clone() {
}
public static function getInstance($param=array()){
if(!self::$instance instanceof self)
self::$instance=new self($param);
return self::$instance;
}
private function initParam($param){
$this->type=$param['type']??'mysql';
$this->host=$param['host']??'127.0.0.1';
$this->port=$param['port']??'3306';
$this->dbname=$param['dbname']??'test';
$this->charset=$param['charset']??'utf8';
$this->user=$param['user']??'root';
$this->pwd=$param['pwd']??'root';
}
private function initPDO(){
try{
$dsn="{$this->type}:host={$this->host};port={$this->port};dbname={$this->dbname};charset={$this->charset}";
$this->pdo=new \PDO($dsn, $this->user, $this->pwd);
} catch (\PDOException $ex) {
$this->showException($ex);
exit;
}
}
private function showException($ex,$sql=''){
if($sql!=''){
echo 'SQL语句执行失败<br>';
echo '错误的SQL语句是:'.$sql,'<br>';
}
echo '错误编号:'.$ex->getCode(),'<br>';
echo '错误行号:'.$ex->getLine(),'<br>';
echo '错误文件:'.$ex->getFile(),'<br>';
echo '错误信息:'.$ex->getMessage(),'<br>';
}
private function initException(){
$this->pdo->setAttribute(\PDO::ATTR_ERRMODE,\PDO::ERRMODE_EXCEPTION);
}
public function exec($sql){
try{
return $this->pdo->exec($sql);
} catch (\PDOException $ex) {
$this->showException($ex, $sql);
exit;
}
}
public function lastInsertId(){
return $this->pdo->lastInsertId();
}
private function fetchType($type){
switch ($type){
case 'num':
return \PDO::FETCH_NUM;
case 'both':
return \PDO::FETCH_BOTH;
case 'obj':
return \PDO::FETCH_OBJ;
default:
return \PDO::FETCH_ASSOC;
}
}
public function fetchAll($sql,$type='assoc'){
try{
$stmt=$this->pdo->query($sql);
$type= $this->fetchType($type);
return $stmt->fetchAll($type);
} catch (\Exception $ex) {
$this->showException($ex, $sql);
}
}
public function fetchRow($sql,$type='assoc'){
try{
$stmt=$this->pdo->query($sql);
$type= $this->fetchType($type);
return $stmt->fetch($type);
} catch (\Exception $ex) {
$this->showException($ex, $sql);
exit;
}
}
public function fetchColumn($sql){
try{
$stmt=$this->pdo->query($sql);
return $stmt->fetchColumn();
} catch (\Exception $ex) {
$this->showException($ex, $sql);
exit;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?