Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Tentando construir uma classe de banco de dados estática que eu possa acessar de qualquer função fora da classe


Para que sua classe opere estaticamente, você precisa fazer algumas coisas.

Primeiro, faça a conexão estática, por exemplo
private static $connection;

Em segundo lugar, por que todos os sublinhados?
define('DB_HOST', 'localhost');
define('DB_NAME', 'your_db_name');
define('DB_USER', 'username');
define('DB_PASS', 'password');

Além disso, por que usar constantes de classe? Basta usar as constantes que você já definiu.

Terceiro, perca o construtor. Você não pode esperar criar uma instância desta classe e use-o estaticamente. Eu optaria por uma abordagem de carregamento lento para a conexão
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;
}

Em seguida, seus métodos públicos chamariam esse método internamente. Também detalharei seu dbDataArray método para mostrar como retornar uma matriz associativa
public static function dbDataArray($query, $params = array()) {
    $stmt = self::getConnection()->prepare($query);
    $stmt->execute($params);
    return $stmt->fetchAll();
}