Mysql
 sql >> Base de données >  >> RDS >> Mysql

Essayer de créer une classe de base de données statique à laquelle je peux accéder à partir de n'importe quelle fonction en dehors de la classe

Pour que votre classe fonctionne de manière statique, vous devez faire quelques choses.

Tout d'abord, rendez la connexion statique, par exemple

private static $connection;

Deuxièmement, pourquoi tous les traits de soulignement ?

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

Aussi, pourquoi utiliser des constantes de classe ? Utilisez simplement les constantes que vous avez déjà définies.

Troisièmement, perdez le constructeur. Vous ne pouvez pas vous attendre à créer une instance de cette classe et l'utiliser de manière statique. J'opterais pour une approche de chargement paresseux pour la connexion

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

Ensuite, vos méthodes publiques appelleraient cette méthode en interne. Je vais également étoffer votre dbDataArray méthode pour vous montrer comment retourner un tableau associatif

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