sql >> Base de Datos >  >> RDS >> Mysql

Intentando construir una clase de base de datos estática a la que pueda acceder desde cualquier función fuera de la clase

Para que su clase funcione estáticamente, debe hacer algunas cosas.

Primero, haga que la conexión sea estática, por ejemplo

private static $connection;

En segundo lugar, ¿por qué todos los guiones bajos?

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

Además, ¿por qué usar constantes de clase? Solo usa las constantes que ya has definido.

Tercero, perder el constructor. No puede esperar crear una instancia de esta clase y usarlo de forma estática. Yo optaría por un enfoque de carga diferida para la conexión

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;
}

Entonces, sus métodos públicos llamarían a este método internamente. También desarrollaré tu dbDataArray método para mostrarle cómo devolver una matriz asociativa

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