<?php
class MySQL_DB {
    private $last_query;    //上一次执行的sql指令
    private $conn;            //当前连接数据库服务器的资源类型
    private $errno;            //错误代号
    private $errDie = true;    //强制错误后结束脚本
    private $errMsgArr_filename = "";//自定义错误提示信息数组的文件名

    //构造函数
    public function __construct($dbhost, $dbuser, $dbpwd, $dbname, $dbcharset="utf8", $pconnect=0) {
        //连接数据库服务器
        if($pconnect == 0) {
            $this->conn = mysql_connect($dbhost, $dbuser, $dbpwd);
        }else{
            $this->conn = mysql_pconnect($dbhost, $dbuser, $dbpwd);
        }
        if($this->conn == false) {
            $this->errno = mysql_errno();//记录发生的错误代号

            $this->errMsg();//报错
        }
       
        //选择操作的目标数据库
        $res = mysql_select_db($dbname, $this->conn);
        if($res == false) {
            $this->errno = mysql_errno();//记录发生的错误代号

            $this->errMsg();//报错
        }

        //设置字符集编码
        $this->query("set names " . $dbcharset);
    }

    //设置errDie属性的方法(预留为以后ajax做操作准备)
   private function set_errDie($value){
        $this->errDie = $value;

    }
   
    //查询一条记录的sql操作
   public function get_one($sql) {
        $res = $this->query($sql);
        $row = mysql_fetch_assoc($res);
        return $row;
    }
   
    //查询多条
    public function get_all($sql) {
        $res = $this->query($sql);
        $arr = array();
        while($row = mysql_fetch_assoc($res)) {
            $arr[] = $row;
        }
        return $arr;
    }

    //查询一个字段的值
    public function get_val($sql) {
        $res = $this->query($sql);
        $row = mysql_fetch_array($res);
        return $row[0];
    }

    //统计行数
    public function get_count($tbName, $addWhere="") {
        $sql = "select count(*) from {$tbName} {$addWhere}";
        return $this->get_val($sql);
    }

    //执行sql指令
    public function query($sql) {
        $this->last_query = $sql;//保存当前的sql指令

        $res = mysql_query($sql);

        if($res == false) {
            $this->errno = mysql_errno();//记录发生的错误代号

            if($this->errno == 1062) {
                //针对唯一性索引的错误,做特殊处理
                return -1062;
            }else{
                $this->errMsg();//报错
            }
        }else{
            return $res;
        }

    }

    public function get_insert_id() {
        return mysql_insert_id();
    }
   
    //设置自定义错误数组文件名的方法
    private function set_errMsgArr_filename($filename) {
        $this->errMsgArr_filename = $filename;
    }
   
    //获得定义在单独文件中的自定义错误信息
    private function get_errMsgArr() {
       
        if(file_exists($this->errMsgArr_filename)){
            require_once($this->errMsgArr_filename);
        }else{
            $mysql_err_msg = "";
        }
        return $mysql_err_msg;
    }

    public function errMsg() {
        echo "<div style='color:red;'>";
        echo "Errno: " . $this->errno."<BR>";
        echo "Last Query: " . $this->last_query . "<BR>";

        //显示自定义的错误信息
        $errMsgArr = $this->get_errMsgArr();
        $errMsg = empty($errMsgArr) ? mysql_error() : ($errMsgArr[$this->errno] . "(" . mysql_error(). ")");
        echo "Error Message: " . $errMsg;
        echo "</div>";

        if($this->errDie == true) {
            exit;
        }
    }
}
?>