- 该类是在单例模式下实现数据库的连接,选择,数据的单条查询,多条查询,以及总记录数,设置字符集以及销毁等功能.
- 其中遵循三私一公,私有化了对象,构造方法以及克隆,只保留了一个getInstance的静态公有方法.
```<?php
class Db
{
private static $obj = null;
private $db_host;
private $db_user;
private $db_pass;
private $db_name;
private $charset;
private $link;
private function __construct($config = array())
{
$this->db_host = $config['db_host'];
$this->db_user = $config['db_user'];
$this->db_pass = $config['db_pass'];
$this->db_name = $config['db_name'];
$this->charset = $config['charset'];
$this->connectDb();
$this->selectDb();
$this->setCharset();
}
private function __clone()
{
}
public static function getInstance($config = array())
{
if (!self::$obj instanceof self)
{
self::$obj = new self($config);
}
return self::$obj;
}
private function connectDb()
{
if (!$this->link = @mysqli_connect($this->db_host,$this->db_user,$this->db_pass))
{
echo '连接MySQL数据库失败';
die();
}
}
private function selectDb()
{
if (!mysqli_select_db($this->link,$this->db_name))
{
echo '数据库选择失败';
die();
}
}
private function setCharset()
{
mysqli_set_charset($this->link,$this->charset);
}
public function exec($sql)
{
if (strtolower(substr($sql,0,6)) == 'select')
{
echo 'sql语句错误';
die();
}
return mysqli_query($this->link,$sql);
}
private function query($sql)
{
if (strtolower(substr($sql,0,6)) != 'select')
{
echo 'sql语句错误';
die();
}
return mysqli_query($this->link,$sql);
}
public function fetchOne($sql,$type=3)
{
$result = $this->query($sql);
$types = [
1 => MYSQLI_NUM,
2 => MYSQLI_BOTH,
3 => MYSQLI_ASSOC
];
return mysqli_fetch_array($result,$types[$type]);
}
public function fetchAll($sql,$type=3)
{
$result = $this->query($sql);
$types = [
1 => MYSQLI_NUM,
2 => MYSQLI_BOTH,
3 => MYSQLI_ASSOC
];
return mysqli_fetch_all($result,$types[$type]);
}
public function rowCount($sql)
{
$result = $this->query($sql);
return mysqli_num_rows($result);
}
public function __destruct()
{
mysqli_close($this->link);
}
}
$arr = [
'db_host' => '数据库地址',
'db_user' => '用户名',
'db_pass' => '密码',
'db_name' => '数据库名字',
'charset' => '字符集'
];
$db1 = Db::getInstance($arr);
$db2 = Db::getInstance($arr);
var_dump($db1,$db2);