+ -
当前位置:首页 → 问答吧 → 精简了张老师的mysql操作类...希望对大家有帮助

精简了张老师的mysql操作类...希望对大家有帮助

时间:2010-07-06

来源:互联网

<?php

    /**
     * mysql操作类
     *
     * @author:黄乐
     * @version:1.0
     * @lastupdate:2010-7-03
     *
     *
     * 使用实例:
     * $db = new mysql("localhost","root","","数据库名");
     * ...
     */


    /**
     * mysql操作类
     */
    class mysql{

        private $db_host; //数据库主机
        private $db_user; //数据库用户名
        private $db_pwd; //数据库密码
        private $db_database; //数据库名
        private $conn; //数据库连接标识;
        private $sql; //sql执行的语句
        private $result; //query的资源标识符
        private $coding; //数据库编码,GBK,UTF8,gb2312
        private $show_error = true; //本地调试使用,打印错误

        /**
         * 构造函数
         *
         * @access public
         * @parameter string $db_host         数据库主机
         * @parameter string $db_user         数据库用户名
         * @parameter string $db_pwd          数据库密码
         * @parameter string $db_database   数据库名
         * @parameter string $coding          编码
         * @return void
         */
        public function __construct($db_host, $db_user, $db_pwd, $db_database, $coding = 'gb2312'){
            $this->db_host = $db_host;
            $this->db_user = $db_user;
            $this->db_pwd =  $db_pwd;
            $this->db_database = $db_database;
            $this->coding = $coding;
            $this->connect();
        }

        /**
         * 链接数据库
         *
         * @access private
         * @return void
         */
        private function connect(){

            $this->conn = @mysql_connect($this->db_host,$this->db_user,$this->db_pwd);
            if(!$this->conn){
                //show_error开启时,打印错误
                if($this->show_error){
                    $this->show_error('错误提示:链接数据库失败!');
                }
            }

            if(!@mysql_select_db($this->db_database, $this->conn)){
                //数据库链接失败
                if($this->show_error){
                    $this->show_error('错误提示:打开数据库失败!');
                }
            }

            if(!@mysql_query("SET NAMES $this->coding")){
                //设置编码失败
                if($this->show_error){
                    $this->show_error('错误提示:设置编码失败!');
                }
            }
        }

        /**
         * 可执行查询添加修改删除等任何sql语句
         *
         * @access public
         * @parameter string $sql      sql语句
         * @return resource        资源标识符
         */
        public function query($sql){
            $this->sql = $sql;
            $result = mysql_query($this->sql, $this->conn);
            if(!$result){
                //query执行失败,打印错误
                $this->show_error("错误的SQL语句:", $this->sql);
            }else{
                //返回资源标识符
                return $this->result = $result;
            }
        }

        /**
         * 查询mysql服务器中所有的数据库
         *
         * @access public
         * @return void
         */
        public function show_databases(){
            $this->query("show databases");
            //打印数据库的总数
            echo "现有数据库:" . mysql_num_rows($this->result);
            echo "<br />";
            $i = 1;
            //循环输出每个数据库的名称
            while($row=mysql_fetch_array($this->result)){
                echo "$i $row[Database]" . "<br />";
                $i++;
            }
        }

        /**
         * 查询数据库下所有表名
         *
         * @access public
         * @return void
         */
        public function show_tables(){
            $this->query("show tables");
            //打印表的总数
            echo "数据库{$this->db_database}共有" . mysql_num_rows($this->result) . "张表:";
            echo "<br />";
            //构造数组下标,循环出数据库所有表名
            $column_name = "Tables_in_" . $this->db_database;
            $i = 1;
            //循环输出每个表的名称
            while($row=mysql_fetch_array($this->result)){
                echo "$i $row[$column_name]" . "<br />";
                $i++;
            }
        }

        /**
         * 取得记录集,获取数组-索引和关联
         *
          * @access public
          * @parameter resource $result  query的资源标识符
         * @return void
         */
        public function fetch_array($result=''){
            if($this->result){
                return mysql_fetch_array($this->result);
            }else{
                //不存在$this->result,则使用参数
                return mysql_fetch_array($result);
            }
        }

        /**
         * 简化select查询语句
         *
         * @access public
         * @parameter string $table  表名
         * @parameter string $field  字段名
         * @return resource
         */
        public function findall($table, $field = '*') {
            return $this->query("SELECT $field FROM $table");
        }

        /**
         * 简化delete查询语句
         *
         * @access public
         * @parameter string $table       表名
         * @parameter string $condition  查询的条件
         * @return resource
         */
        public function delete($table, $condition) {
            return $this->query("DELETE FROM $table WHERE $condition");
        }

        /**
         * 简化insert插入语句
         *
         * @access public
         * @parameter string $table  表名
         * @parameter string $field  字段名
         * @parameter string $value  插入值
         * @return resource
         */
        public function insert($table, $field, $value) {
            return $this->query("INSERT INTO $table ($field) VALUES ('$value')");
        }

        /**
         * 简化update插入语句
         *
         * @access public
         * @parameter string $table            表名
         * @parameter string $update_content  更新的内容
         * @parameter string $condition       条件
         * @return resource
         */
        public function update($table, $update_content, $condition) {
            return $this->query("UPDATE $table SET $update_content WHERE $condition");
        }

        /**
         * 取得上一步 INSERT 操作产生的 ID
         *
         * @access public
         * @return integer
         */
        public function insert_id() {
            return mysql_insert_id();
        }

        /**
         * 计算结果集条数
         *
         * @access public
         * @return integer
         */
        public function num_rows() {
            if ($this->result == null) {
                if ($this->show_error) {
                    $this->show_error("SQL语句错误", "请检查是否已经使用了query()方法,并成功查询且返回了资源标识符?");
                }
            } else {
                return mysql_num_rows($this->result);
            }
        }

        /**
         * 查询字段数量和字段信息
         *
         * @access public
         * @parameter string $table        表名
         * @return void
         */
        public function num_fields($table) {
            $this->query("select * from $table");
            echo "<br />";
            //打印字段数
            echo "字段数:" . $total = mysql_num_fields($this->result);
            echo "<pre>";
            //mysql_fetch_field() 函数从结果集中取得列信息并作为对象返回。
            for ($i = 0; $i < $total; $i++) {
                print_r(mysql_fetch_field($this->result, $i));
            }
            echo "</pre>";
            echo "<br />";
        }

        /**
         * 输出sql语句错误信息
         *
         * @access public
         * @parameter string $message    提示信息
         * @return void
         */
        public function show_error($message='',$sql=''){
            echo "<fieldset>";
            echo "<legend>错误信息提示:</legend><br />";
            echo "<div style='font-size:14px; clear:both; font-family:Verdana, Arial, Helvetica, sans-serif;'>";
            //打印错误原因
            echo "错误原因:" . mysql_error() . "<br /><br />";
            //打印错误信息
            //mysql_error() 函数返回上一个 MySQL 操作产生的文本错误信息。
            echo "<div style='height:20px; background:#FF0000; border:1px #FF0000 solid'>";
            echo "<font color='white'>" . $message . "</font>";
            echo "</div>";
            //打印错误sql语句
            echo "<font color='red'><pre>" . $sql . "</pre></font>";
            echo "</div>";
            echo "</fieldset>";
        }
    }

?>

作者: huangle   发布时间: 2010-07-06

作者: 所谓   发布时间: 2010-07-06

有一个防注入的inject_check方法,还是挺有用的。

作者: 福春   发布时间: 2010-07-06

新手学习中...
新手学习中...
新手学习中...

作者: donglingang   发布时间: 2010-07-08

谢谢您的无私分享

作者: byshh152   发布时间: 2010-07-09

真是太好了  解决了我刚刚问的问题之一
呵呵 感谢感谢

作者: 逍遥2005   发布时间: 2010-07-17

作者: cntroy   发布时间: 2010-07-20

很好

作者: 小白鼠   发布时间: 2010-07-21

好东西,我把您的代码封装了一下。希望能够方便大家。
附件: 精简mysql操作类.rar (3 K) 下载次数:5

作者: heluotianzhe   发布时间: 2010-07-26

谢谢您的无私分享

作者: ccczzz   发布时间: 2010-07-28

不好!

作者: zhongwei0806   发布时间: 2010-07-28

谢谢分享,学习了

作者: jingyexing   发布时间: 2010-07-30

学习了谢谢

作者: 13148199   发布时间: 2010-08-02

作者: yangbaojin1988   发布时间: 2010-08-07

好东西

作者: phua   发布时间: 2010-09-26