PHP:在类中使用数据库

标签 php mysql database class pdo

当我包含它时,我已经有一个连接到数据库的数据库文件

class-database.php

class dbFactory {
    private static $host    = 'some.host.com';
    private static $name    = 'someDB';
    private static $user    = 'someUser';
    private static $pass    = 'somePassword';


    public function __construct() { }


    public static function pdo() {
        try {
            # MySQL with PDO_MYSQL
            return new PDO("mysql:host=$host;dbname=$name", $user, $pass);
            }
        catch(PDOException $e) {
            echo $e->getMessage();
            return null;
            exit;
            }  
    } // End: pdo()
} //End class

我通常通过以下方式访问它:

require( 'some-file-path' . 'class-database.php' );
$db = dbFactory::pdo();

问题如下: 如何从另一个类中访问 $db

例如,如果我有一个名为 class-html.php 的类文件并且在该类中(又名,作为类代码的一部分)我需要类似...:

class-html.php

class html {
  ...some code...
  $db->query('SELECT * FROM tbl_head');
  ...some more code...
} //End: html

我一直在做但没有成功的是:

require( 'some-file-path' . 'class-database.php' );
$db = dbFactory::pdo();

require( 'some-file-path' . 'class-html.php' );

我收到错误消息,但不确定从这里开始做什么

最佳答案

您可以使用 Singleton class

class dbFactory {

    //...
    private static $pdo_instance = null;

    private static function getPDOinstance() {
        if (self::$pdo_instance === null) {
            try {
                self::$pdo_instance = new PDO("...");
            } catch (PDOException $e) {
                //...
            }
        }
        return self::$pdo_instance;
    }

}

当您现在访问 dbFactory::getPDOinstance() 时,您将只有一个 PDO 实例,该实例使用 DB 在每个类中创建新实例

关于PHP:在类中使用数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692415/

相关文章:

sql - 连接到我的 VPS PostgreSQL

Php的Mysqli以随机顺序执行语句(很奇怪)

PHP json_encode gapi (google analytics) 数组返回空值

php - MySQL/php INSERT 语句显示不可预测的结果(无插入)

mysql - 使用聚合函数时从 hibernate 中的多个表中选择列

database - 是否可以在 DB2 中设置 MQT 的自动刷新?

php - 为什么 1++ + 1 在 php 中计算结果为 2?

php - 如何比较具有最佳性能的数组

Python peewee - 从多个表中选择

mysql - 使用 homebrew 安装 MySQL 是否包括 Workbench 和 GUI(是否首选安装 native )?