Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Der Versuch, eine statische Datenbankklasse zu erstellen, auf die ich von jeder Funktion außerhalb der Klasse zugreifen kann

Damit Ihre Klasse statisch funktioniert, müssen Sie einige Dinge tun.

Machen Sie zuerst die Verbindung statisch, zB

private static $connection;

Zweitens, warum all die Unterstriche?

define('DB_HOST', 'localhost');
define('DB_NAME', 'your_db_name');
define('DB_USER', 'username');
define('DB_PASS', 'password');

Warum überhaupt Klassenkonstanten verwenden? Verwenden Sie einfach die Konstanten, die Sie bereits definiert haben.

Drittens, verlieren Sie den Konstruktor. Sie können nicht erwarten, eine Instanz dieser Klasse and zu erstellen benutze es statisch. Ich würde für die Verbindung einen Lazy-Load-Ansatz wählen

private static function getConnection() {
    if (self::$connection === null) {
        $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',
            DB_HOST, DB_NAME);

        self::$connection = new PDO($dsn, DB_USER, DB_PASS, array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_EMULATE_PREPARES => false,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
        ));
    }
    return self::$connection;
}

Dann würden Ihre öffentlichen Methoden diese Methode intern aufrufen. Ich werde auch Ihr dbDataArray konkretisieren -Methode, um Ihnen zu zeigen, wie Sie ein assoziatives Array

zurückgeben
public static function dbDataArray($query, $params = array()) {
    $stmt = self::getConnection()->prepare($query);
    $stmt->execute($params);
    return $stmt->fetchAll();
}