加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP:使用数据库类

发布时间:2020-12-13 17:09:48 所属栏目:PHP教程 来源:网络整理
导读:我有一个类数据库和类用户.我的问题是我想创建一个 Database实例并在我的课程中使用它. 类用户只是其中之一.我希望能够使用数据库对象从表中获取用户记录.我不想在每个类中创建一个数据库变量,因为我将使用会话.有解决方案吗? class Database{ /* * Edit th
我有一个类数据库和类用户.我的问题是我想创建一个 Database实例并在我的课程中使用它.

类用户只是其中之一.我希望能够使用数据库对象从表中获取用户记录.我不想在每个类中创建一个数据库变量,因为我将使用会话.有解决方案吗?

class Database
{
    /*
     * Edit the following variables
     */
    private $db_host = 'localhost';     // Database Host
    private $db_user = 'root';          // Username
    private $db_pass = '';          // Password
    private $db_name = 'researchportal';          // Database
    /*
     * End edit
     */

    private $con = false;               // Checks to see if the connection is active
    private $result = array();          // Results that are returned from the query

    /*
     * Connects to the database,only one connection
     * allowed
     */
    public function connect()
    {
        if(!$this->con)
        {
            $myconn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass);
            if($myconn)
            {
                $seldb = @mysql_select_db($this->db_name,$myconn);
                if($seldb)
                {
                    $this->con = true;
                    return true;
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            return true;
        }
    }

    /*
    * Changes the new database,sets all current results
    * to null
    */
    public function setDatabase($name)
    {
        if($this->con)
        {
            if(@mysql_close())
            {
                $this->con = false;
                $this->results = null;
                $this->db_name = $name;
                $this->connect();
            }
        }

    }

    /*
    * Checks to see if the table exists when performing
    * queries
    */
    private function tableExists($table)
    {
        $tablesInDb = @mysql_query('SHOW TABLES FROM '.$this->db_name.' LIKE "'.$table.'"');
        if($tablesInDb)
        {
            if(mysql_num_rows($tablesInDb)==1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    /*
    * Selects information from the database.
    * Required: table (the name of the table)
    * Optional: rows (the columns requested,separated by commas)
    *           where (column = value as a string)
    *           order (column DIRECTION as a string)
    */
    public function select($table,$rows = '*',$where = null,$order = null)
    {
        $q = 'SELECT '.$rows.' FROM '.$table;
        if($where != null)
            $q .= ' WHERE '.$where;
        if($order != null)
            $q .= ' ORDER BY '.$order;

        $query = @mysql_query($q);
        if($query)
        {
            $this->numResults = mysql_num_rows($query);
            for($i = 0; $i < $this->numResults; $i++)
            {
                $r = mysql_fetch_array($query);
                $key = array_keys($r);
                for($x = 0; $x < count($key); $x++)
                {
                    // Sanitizes keys so only alphavalues are allowed
                    if(!is_int($key[$x]))
                    {
                        if(mysql_num_rows($query) > 1)
                            $this->result[$i][$key[$x]] = $r[$key[$x]];
                        else if(mysql_num_rows($query) < 1)
                            $this->result = null;
                        else
                            $this->result[$key[$x]] = $r[$key[$x]];
                    }
                }
            }
            return true;
        }
        else
        {
            return false;
        }
    }

    /*
    * Insert values into the table
    * Required: table (the name of the table)
    *           values (the values to be inserted)
    * Optional: rows (if values don't match the number of rows)
    */
    public function insert($table,$values,$rows = null)
    {
        if($this->tableExists($table))
        {
            $insert = 'INSERT INTO '.$table;
            if($rows != null)
            {
                $insert .= ' ('.$rows.')';
            }

            for($i = 0; $i < count($values); $i++)
            {
                if(is_string($values[$i]))
                    $values[$i] = '"'.$values[$i].'"';
            }
            $values = implode(',',$values);
            $insert .= ' VALUES ('.$values.')';

            $ins = @mysql_query($insert);

            if($ins)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    /*
    * Deletes table or records where condition is true
    * Required: table (the name of the table)
    * Optional: where (condition [column =  value])
    */
    public function delete($table,$where = null)
    {
        if($this->tableExists($table))
        {
            if($where == null)
            {
                $delete = 'DELETE '.$table;
            }
            else
            {
                $delete = 'DELETE FROM '.$table.' WHERE '.$where;
            }
            $del = @mysql_query($delete);

            if($del)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

    /*
     * Updates the database with the values sent
     * Required: table (the name of the table to be updated
     *           rows (the rows/values in a key/value array
     *           where (the row/condition in an array (row,condition) )
     */
    public function update($table,$rows,$where)
    {
        if($this->tableExists($table))
        {
            // Parse the where values
            // even values (including 0) contain the where rows
            // odd values contain the clauses for the row
            for($i = 0; $i < count($where); $i++)
            {
                if($i%2 != 0)
                {
                    if(is_string($where[$i]))
                    {
                        if(($i+1) != null)
                            $where[$i] = '"'.$where[$i].'" AND ';
                        else
                            $where[$i] = '"'.$where[$i].'"';
                    }
                }
            }
            $where = implode('',$where);


            $update = 'UPDATE '.$table.' SET ';
            $keys = array_keys($rows);
            for($i = 0; $i < count($rows); $i++)
            {
                if(is_string($rows[$keys[$i]]))
                {
                    $update .= $keys[$i].'="'.$rows[$keys[$i]].'"';
                }
                else
                {
                    $update .= $keys[$i].'='.$rows[$keys[$i]];
                }

                // Parse to add commas
                if($i != count($rows)-1)
                {
                    $update .= ',';
                }
            }
            $update .= ' WHERE '.$where;
            $query = @mysql_query($update);
            if($query)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }

    /*
    * Returns the result set
    */
    public function getResult()
    {
        return $this->result;
    }
}

班级用户:

<?php 
require_once 'class.database.php';

    class User{
        public $usr_id;
        public $usr_name;
        public $usr_level;
        public $last_access_login;

        public function __construct($id) {
            $this->usr_id = $id;
            //$this->usr_name = $usr_name;
            //$this->usr_level = $usr_level;
            $this->last_access_login = date("F d Y H:i:s.",time());
      }

      public function getUser()
      {
    //  $db->select('login_users','*','user_id='.$this->usr_id.'');  
    //  $res = $db->getResult();  
    //  print_r($res);

        $this->usr_name = $res['username'];
        $this->usr_level = $res['user_level'];
        $this->last_access_login = date("F d Y H:i:s.",time());

      }
    }

    $a = new User(3);
    $a->getUser();

    ?>

解决方法

您需要将$database传递给您的用户构造函数,或者使用像MrJ所建议的那样的单例.

如您所知,将数据库对象作为参数传递非常简单,但是您可以更清楚地了解其他对象:

private $myDatabase = NULL;

public function __construct(Database $myDatabase){
    $this->myDatabase = $myDatabase;
}

然后在课堂上你可以使用你的数据库

$this->myDatabase->select(...);

现在创建对象变得如此简单:

$myUser = new User($database);

显然,根据需要调整它:)

单例也很简单,在数据库类中创建一个静态方法:

private static $staticInstance = NULL;

public static function getInstance(){
    if(Database::$staticInstance == NULL){
        Database::$staticInstance = new Database();
        Database::$staticInstance->connect();
    }
    return Database::$staticInstance;
}

这将创建一个函数,在您需要时自动创建您的唯一数据库类的实例,并在再次调用getInstance时返回该单个实例.

要在其他类中使用它,只需调用:

$mydb = Database::getInstance();

然后使用你的数据库对象……

单身人士在许多类似的情况下非常有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读