使用mysqli的类

时间:2013-08-23 04:21:47

标签: php mysql class mysqli

我正在使用PHP构建API,我有一个问题。我正在使用类,其中一些类需要访问我的数据库。但是,我不想在每个类中为数据库定义变量以便打开它,或者必须将我的mysqli对象作为每个类构造函数的参数发送。

最好的方法是什么?我是否定义了某种全局变量?

3 个答案:

答案 0 :(得分:3)

经典解决方案如下

  1. 创建dbatabase处理程序类的实例,无论是原始mysqli(更糟糕)还是更好的抽象类(方式更好)
  2. 在应用程序类的构造函数中,将此db类实例作为参数并将其分配给本地变量
  3. 将此变量与您的班级一起使用。
  4. 一个简单的例子:

    class Foo()
    {
        protected $db;
        function __construct($db);
        {
            $this->db = $db;
        }
        function getBar($id)
        {
            return $this->db->getOne("SELECT * FROM bar WHERE id=?i", $id);
        }
    }
    $db = new safeMysql();
    $foo = new Foo($db);
    $bar = $foo->getBar($_GET['id']);
    

答案 1 :(得分:0)

如何使用静态类?

class mysqli_wrapper {
private static $db = null;

public static function open() {
    GLOBAL $opts; // this can be global or setup in other ways
    if (!self::$db) {
        self::close();
        self::$db = null;
    }
    self::$db = @mysqli_connect('p:'.$opts['hn'], $opts['un'], $opts['pw'], $opts['db']);
    return self::$db;
}
public static function query($qry) {
    return mysqli_query ( self::$db, $qry );
}
public static function affected_rows() { return @mysqli_affected_rows(self::$db); }
public static function error() { return @mysqli_error(self::$db); }
public static function close() { @mysqli_close(self::$db); }
} // end mysqli_wrapper

mysqli_wrapper::open(); //  Here's how to call it

答案 2 :(得分:0)

在一个系统中,我维护我的应用程序需要访问自己的MySQL数据库,以及远程Oracle和SQL Server数据库,我使用它的特性。这是我的代码的简化,只是使用MySQL:

dbaccess.php

trait DatabaseAccess {
    protected $db;
    private $host = 'host', $dbName = 'db', $username = 'username', $password = 'pword';

    public function connectToMysql() {
         $this->db= new mysqli(......);
    }
}

然后在myclass.php

require 'dbaccess.php'; 
class MyClass {
    use DatabaseAccess;

    //class code.....
}

DatabaseAccess的所有元素都可用,就像您在MyClass中手动输入它们一样。 注意:如果您使用的是PHP< 5.4,那么这个解决方案是不可能的。