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

Forsøger at bygge en statisk databaseklasse, som jeg kan få adgang til fra enhver funktion uden for klassen

For at din klasse kan fungere statisk, skal du gøre et par ting.

Først skal du gøre forbindelsen statisk, f.eks.

private static $connection;

For det andet, hvorfor alle de understregninger?

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

Og hvorfor overhovedet bruge klassekonstanter? Brug blot de konstanter, du allerede har defineret.

For det tredje mister du konstruktøren. Du kan ikke forvente at oprette en forekomst af denne klasse og bruge det statisk. Jeg ville gå efter en lazy-load tilgang til forbindelsen

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

Så ville dine offentlige metoder kalde denne metode internt. Jeg vil også udfylde din dbDataArray metode til at vise dig, hvordan du returnerer et associativt array

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



  1. Rails 3.1:Forespørgsel efter postgres inden for et tidsinterval

  2. Enhver måde at vælge fra MySQL-tabel, hvor et felt ender med et bestemt tegn/tal?

  3. Hvordan forbedres ydeevnen for dato- og tidsfiltrering i SQL Server?

  4. SQL Server 2005 implementering af MySQL REPLACE INTO?