时间:2021-07-01 10:21:17 帮助过:36人阅读
/**
* MySQL数据库类 使用的是PDO
*/
class DB{
/**
* 数据库实例
*/
private static $db_instance;
/**
* 保存错误消息
*/
private static $_error;
/**
* 禁止复制 为了单例模式
*/
private function __clone(){}
/**
* 防止反序列化 为了单例模式
*/
private function __wakeup(){}
/**
* 防止实例化
*/
private function __construct(){}
/**
* 数据库实例化 这里如果实例化失败会产生一个错误,我没有去进行捕获。
*/
private static function getInstance(){
if (empty(self::$db_instance)) {
$config = Config::get('db');
self::$db_instance = new \PDO('mysql:host='. $config['host'] .';dbname=' . $config['database'] . ';port=' . $config['port'], $config['username'], $config['password'], array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'set names ' . $config['charset'], \PDO::ATTR_TIMEOUT => $config['timeout']));
}
return self::$db_instance;
}
/**
* 查询标量数据
* @param string $sql 执行的sql语句
* @param string $params 需要替换$sql中的问号 如果没有?,则为空数组
*/
public static function scalar($sql, $params = []){
$data = self::selectQuery('scalar', $sql, $params);
if (!empty($data[0])) {
return $data[0];
}else{
return '';
}
}
/**
* 查询单列数据
* @param string $sql 执行的sql语句
* @param string $params 需要替换$sql中的问号 如果没有?,则为空数组
*/
public static function column($sql, $params = []){
return self::selectQuery('column', $sql, $params);
}
/**
* 查询一行记录
*/
public static function find($sql, $params = []){
$result = self::selectQuery('find', $sql, $params);
if (empty($result[0])) {
return [];
}
return $result;
}
/**
* 查询多行记录
*/
public static function all($sql, $params = []){
return self::selectQuery('all', $sql, $params);
}
/**
* 查询数据
*/
private static function selectQuery($type, $sql, $params){
self::getInstance();
$instanceStatement = self::$db_instance->prepare($sql);
$result = $instanceStatement->execute($params);
if ($result === false) {
self::$_error = $instanceStatement->errorInfo();
return false;
}else{
self::$_error = null;
switch ($type) {
case 'column': //获取指定的一列数据
case 'scalar': return $instanceStatement->fetchAll(\PDO::FETCH_COLUMN); break; //获取指定的一行数据
case 'find': //获取执行的一行数据
case 'all': //获取全部数据
default: return $instanceStatement->fetchAll(\PDO::FETCH_ASSOC);
break;
}
}
}
/**
* 插入单行数据数据
* @param string $sql 执行的sql语句
* @param array $params 需要插入的参数;
*/
public function insert($sql, $params = []){
return self::executeQuery('insert', $sql, $params);
}
/**
* 更新数据
*/
public function update($sql, $params = []){
return self::executeQuery('update', $sql, $params);
}
/**
* 更新数据数据
* @param string $type insert update delete
* @param string $sql 执行的sql语句
* @param array $params 需要替换?的数据 格式[field1, field2, ...];
*/
private function executeQuery($type, $sql, $params){
self::getInstance();
//初始化
$instanceStatement = self::$db_instance->prepare($sql);
$result = $instanceStatement->execute($params);
if ($result === false) {
$this->_error = $instanceStatement->errorInfo();
return false;
}else{
$this->_error = ''; //清除上次的错误信息
if ($type == 'insert') {
return $this->db->lastInsertId() + $instanceStatement->rowCount() - 1; //测试性质 (不一定正确,风险极高)
}else{
return $instanceStatement->rowCount();
}
}
}
/**
* 获取错误消息
*/
public static function error(){
return self::$_error;
}
/**
* 消除实例
*/
public static function clear(){
self::$db_instance = null;
}
}
?>
那我不客气了。$this->result = mysql_query("$query",$this->conn);
建议题主去看看Yii framework或者laravel它们的数据库封装是怎么做的,你写的这些方法只能认为是来黑php的
好多多余的代码