Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cố gắng xây dựng một lớp cơ sở dữ liệu tĩnh mà tôi có thể truy cập từ bất kỳ hàm nào bên ngoài lớp

Để lớp của bạn hoạt động tĩnh, bạn cần thực hiện một số điều.

Đầu tiên, đặt kết nối tĩnh, ví dụ:

private static $connection;

Thứ hai, tại sao tất cả các dấu gạch dưới?

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

Ngoài ra, tại sao lại sử dụng hằng số lớp? Chỉ cần sử dụng các hằng số bạn đã xác định.

Thứ ba, mất constructor. Bạn không thể mong đợi tạo một phiên bản của lớp này sử dụng nó một cách tĩnh. Tôi sẽ sử dụng phương pháp tải chậm cho kết nối

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

Sau đó, các phương thức công khai của bạn sẽ gọi phương thức này trong nội bộ. Tôi cũng sẽ xác thực dbDataArray của bạn để chỉ cho bạn cách trả về một mảng liên kết

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. MySQL lưu trữ các cạnh đồ thị vô hướng một cách hiệu quả

  2. Tìm kiếm tính khả dụng với MySQL (và PHP)?

  3. Lỗi TypeScript khi sử dụng Op.between trong Sequelize with Dates

  4. mySQL tìm ra các trò lừa đảo và loại bỏ chúng

  5. truy cập mysql trong máy chủ từ hộp ảo khách