自己的一个 PHP PDO 封装类

就自己用着舒服,要说面面俱到那肯定是没有的,但是我自己还是觉得现阶段够用,以后再说呗

<?php

require_once "config.php";

class DB {
	static private $dbh = NULL;

	function __construct() {
		// 构造函数
		try {
			$this->dbh = new PDO("mysql:host=".DB_HOST.";port=".DB_PORT.";dbname=".DB_NAME, DB_USERNAME, DB_PASSWORD);
			$this->dbh->exec("set names utf8");
		} catch (PDOException $e) {
			$this->logger($e->getMessage());
			die("db err");
		}
	}

	function query($query, $conditions=null) {
		// 如果没有传入参数
		if ($conditions == null) {
			$stmt = $this->dbh->query($query);
			if ($stmt === FALSE) {
				// query 函数的出错信息是存放在 dbh 中的
				$this->logger(var_export($this->dbh->errorInfo(), TRUE));
				return FALSE;
			}
			return $stmt->fetchAll(PDO::FETCH_ASSOC);
		}

		// 如果传入的参数不是数组类型,转换成数组
		if ( ! is_array($conditions)) {
			$conditions = array($conditions);
		}

		// 预编译语句
		$stmt = $this->dbh->prepare($query);
		if ( ! $stmt->execute($conditions)) {
			$this->logger(var_export($stmt->errorInfo(), TRUE));
			return FALSE;
		}
		return $stmt->fetchAll(PDO::FETCH_ASSOC);
	}

	function getLastID() {
		return $this->dbh->lastInsertId();
	}

	function logger($msg='') {
		file_put_contents("db.log.txt",
			'[' . date('Y-m-d H:i:s') . '] ' . $msg . PHP_EOL,
			FILE_APPEND);
	}
}

Leave a Reply

Your email address will not be published. Required fields are marked *