sql >> Database >  >> RDS >> Mysql

Ik probeer een statische databaseklasse te bouwen waartoe ik toegang heb vanuit elke functie buiten de klasse

Om je klas statisch te laten werken, moet je een paar dingen doen.

Maak eerst de verbinding statisch, bijv.

private static $connection;

Ten tweede, waarom al die onderstrepingstekens?

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

En waarom überhaupt klasseconstanten gebruiken? Gebruik gewoon de constanten die u al hebt gedefinieerd.

Ten derde, verlies de constructor. Je kunt niet verwachten dat je een instantie van deze klasse maakt en gebruik het statisch. Ik zou gaan voor een luie aanpak voor de verbinding

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

Dan zouden uw openbare methoden deze methode intern aanroepen. Ik zal ook invulling geven aan uw dbDataArray methode om u te laten zien hoe u een associatieve array kunt retourneren

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



  1. Hoe CHR() werkt in MariaDB

  2. Python JSON-encoder om datetime te ondersteunen?

  3. Booleaanse parameter doorgeven aan Oracle-procedure C#

  4. Monitoring gebruikte verbindingen op mysql om 'te veel verbindingen' te debuggen