+ -
当前位置:首页 → 问答吧 → 写了一个数据库连接类,大家看看写得怎样

写了一个数据库连接类,大家看看写得怎样

时间:2011-11-18

来源:互联网


我今年19,很爱编程,因为快要工作的原因,我用了一个月的时间去制作了一个新闻及留言板系统当作是自己的个人作品,我也很怕进不了这个行业,所以我一直在努力学习PHP更高级的知识。因为之前学过C++有点面向对象的基础,所以自己写了一个数据库连接的类,还得请教一下各位哪里写得不好或者需要改进,我定会悉心听取大家的意见,其实...我还想多交点朋友,每天在家打开电脑就写代码,那种感觉真的好孤独。好了,不多说,附上代码,请大家多多指点!


PHP code

<?
    //数据库连接类
    class db_conn
    {
        public $db_server_name;
        public $db_name;
        public $db_pass;
        public $db_databese;
        public $link;
        public $sql;
        public $result;
        
        //构造函数
        function __construct($server='localhost',$name='root',$pass='3561176',$database='kenny_site'){
            $this->db_server_name = $server;
            $this->db_name = $name;
            $this->db_pass = $pass;
            $this->db_database = $database;
            //调用函数
            $this->connect();
            $this->select($database);
            $this->Set_code();
        }
        
        //数据库连接
        function connect(){
            $this->link = mysql_connect($this->db_server_name,$this->db_name,$this->db_pass,$this->db_database) or die("连接 失败");
        } 
        
        //选择数据库
        function select($data){
            mysql_select_db($data);
        }
        
        //设置字符编码
        function Set_code(){
            mysql_query("SET NAMES 'UTF8'"); 
        }
        
        //查询数据库函数
        function query($sql){
            //echo $sql;
            $this->result = mysql_query($sql);
        }
        
        //获取查询值
        function fetch(){
            $i = 0;
            $arr = array();
            while ( $re = mysql_fetch_array($this->result) ){
                $arr[$i] = $re;
                $i++;
            }echo mysql_error();
            return $arr;
        }
    }
?>
        
<?        //生成实例
        /*
        $db =new db_conn();
        $db->query("select Title,Content from news");
        $hello = $db->fetch();
        foreach($hello as $name=> $value){
            echo $value["Title"].'<br>';
            echo $value["Content"].'<br>';
        }
        */
?>

作者: ykennyy   发布时间: 2011-11-18

足够轻量,能满足基本需求了。需求不变的前提下,错误处理方面有些改进空间。

作者: binarie   发布时间: 2011-11-18

PHP code

//指手画脚一下,勿怪

//查询数据库函数
        function query($sql){
            //echo $sql;
            $this->result = mysql_query($sql) or die(mysql_error());
        }
        
        //获取查询值
        function fetch(){
           // $i = 0;
            $arr = array();
            while ( $re = mysql_fetch_array($this->result) ){
              //  $arr[$i] = $re;
               // $i++;
                 $arr[$i] = $re;
            } 
            return $arr;
        }


作者: TottyAndBaty   发布时间: 2011-11-18

fetch()感觉太繁琐了,打散结果集然后又拼成数组不划算。

作者: dream1206   发布时间: 2011-11-18

1、缺少检错机制
2、fetch 应更名为 fetchall 即读取全部结果
  保留原 fetch 方法名并调整算法 每次读取一条结果
3、query 方法总是用 $this->result 保存 mysql_query 的返回
  一旦执行了非 select 指令,将导致 fetch 方法失败
4、使用单一的变量保存结果集资源,将导致该类的对象不能嵌套使用

作者: xuzuning   发布时间: 2011-11-18

public $db_server_name;
这一堆变量,最好设为private,否则你的封装只是为了快速调用方法而己,对变量应该保护好。

 $this->link
既然有了link标识,为何 select db,query 时不用呢??

$this->Set_code();
既然有了这个接口,何不允许用户自定义呢??

如楼上所说,
fetch =》 fetchAll 获所有
fetchRow 获取行 //这两个必须有吧
fetchOne 获得第一行,行一个字段,最好有,有时 select count 的时候很好用。
还有获取列之类的,可以有,看需求。。。

如果用户执行了insert,那乍样获取自增id?

所有的方法,缺少 public private 标识符,标准写法,都需要写上
connect , select, setcode 之类的,可以设为private保护。



Set_code() 建议使用驼峰方式 setCode

作者: yangball   发布时间: 2011-11-18

黛玉MM 说出了我的心声.我就不废话了.建议参考一些现成的类,分析一下为什么有不一样.

作者: PhpNewnew   发布时间: 2011-11-18

相关阅读 更多