Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Próbuję zbudować statyczną klasę bazy danych, do której mogę uzyskać dostęp z dowolnej funkcji spoza klasy

Aby Twoja klasa działała statycznie, musisz zrobić kilka rzeczy.

Najpierw ustaw połączenie statyczne, np.

private static $connection;

Po drugie, dlaczego wszystkie podkreślenia?

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

Po co w ogóle używać stałych klas? Po prostu użyj stałych, które już zdefiniowałeś.

Po trzecie, zgub konstruktora. Nie możesz oczekiwać, że utworzysz instancję tej klasy i używaj go statycznie. Wybrałbym leniwe podejście do połączenia

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

Następnie twoje metody publiczne wywołałyby tę metodę wewnętrznie. Dostosuję również Twój dbDataArray metoda pokazująca, jak zwrócić tablicę asocjacyjną

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy kolejność warunków w klauzuli WHERE wpływa na wydajność MySQL?

  2. Jak powiększyć diagram EER w MySQL Workbench?

  3. Mysql_real_escape_string() Nie można ustanowić połączenia z serwerem

  4. PHP Wyszukiwanie i sortowanie MySQL według trafności

  5. Jak obliczyć różnicę między dwoma znacznikami czasu w MySQL?