sql >> Databáze >  >> RDS >> Mysql

Snažím se vytvořit statickou databázovou třídu, ke které mám přístup z jakékoli funkce mimo třídu

Aby vaše třída fungovala staticky, musíte udělat pár věcí.

Nejprve udělejte spojení statické, např.

private static $connection;

Za druhé, proč všechna ta podtržítka?

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

Také, proč vůbec používat konstanty třídy? Stačí použít konstanty, které jste již definovali.

Za třetí, ztraťte konstruktéra. Nemůžete očekávat, že vytvoříte instanci této třídy a použít staticky. U připojení bych zvolil líný přístup

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

Potom by vaše veřejné metody interně volaly tuto metodu. Doplním také váš dbDataArray metoda, která vám ukáže, jak vrátit asociativní pole

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



  1. V klauzuli FROM nemůžete určit cílovou tabulku pro aktualizaci

  2. Jak vytvořím další sloupec automatického přírůstku MySQL?

  3. Jak zaokrouhlit číslo na nejbližší celé číslo v SQL

  4. Převeďte VARCHAR2 na číslo