Mysql
 sql >> Database >  >> RDS >> Mysql

Sto cercando di creare una classe di database statica a cui posso accedere da qualsiasi funzione al di fuori della classe

Affinché la tua classe funzioni in modo statico, devi fare alcune cose.

Per prima cosa, rendi la connessione statica, ad es.

private static $connection;

In secondo luogo, perché tutti i trattini bassi?

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

Inoltre, perché usare le costanti di classe? Usa le costanti che hai già definito.

Terzo, perdere il costruttore. Non puoi aspettarti di creare un'istanza di questa classe e usalo staticamente. Sceglierei un approccio pigro per la connessione

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

Quindi, i tuoi metodi pubblici chiamerebbero questo metodo internamente. Approfondirò anche il tuo dbDataArray metodo per mostrarti come restituire un array associativo

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