database.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. /**
  3. * Database Connection Class
  4. * Handles PDO database connections and basic operations
  5. */
  6. class Database {
  7. private static $instance = null;
  8. private $pdo;
  9. private $host;
  10. private $name;
  11. private $user;
  12. private $pass;
  13. private function __construct() {
  14. $this->host = DB_HOST;
  15. $this->name = DB_NAME;
  16. $this->user = DB_USER;
  17. $this->pass = DB_PASS;
  18. $this->connect();
  19. }
  20. public static function getInstance() {
  21. if (self::$instance === null) {
  22. self::$instance = new self();
  23. }
  24. return self::$instance;
  25. }
  26. private function connect() {
  27. try {
  28. $dsn = "mysql:host={$this->host};dbname={$this->name};charset=utf8mb4";
  29. $options = [
  30. PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  31. PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  32. PDO::ATTR_EMULATE_PREPARES => false,
  33. ];
  34. $this->pdo = new PDO($dsn, $this->user, $this->pass, $options);
  35. } catch (PDOException $e) {
  36. throw new Exception("Database connection failed: " . $e->getMessage());
  37. }
  38. }
  39. public function getConnection() {
  40. return $this->pdo;
  41. }
  42. public function query($sql, $params = []) {
  43. try {
  44. $stmt = $this->pdo->prepare($sql);
  45. $stmt->execute($params);
  46. return $stmt;
  47. } catch (PDOException $e) {
  48. throw new Exception("Query failed: " . $e->getMessage());
  49. }
  50. }
  51. public function fetch($sql, $params = []) {
  52. $stmt = $this->query($sql, $params);
  53. return $stmt->fetch();
  54. }
  55. public function fetchAll($sql, $params = []) {
  56. $stmt = $this->query($sql, $params);
  57. return $stmt->fetchAll();
  58. }
  59. public function insert($table, $data) {
  60. $columns = implode(', ', array_keys($data));
  61. $placeholders = implode(', ', array_fill(0, count($data), '?'));
  62. $values = array_values($data);
  63. $sql = "INSERT INTO $table ($columns) VALUES ($placeholders)";
  64. $this->query($sql, $values);
  65. return $this->pdo->lastInsertId();
  66. }
  67. public function update($table, $data, $where, $whereParams = []) {
  68. $setParts = [];
  69. $values = [];
  70. foreach ($data as $column => $value) {
  71. $setParts[] = "$column = ?";
  72. $values[] = $value;
  73. }
  74. $setClause = implode(', ', $setParts);
  75. $sql = "UPDATE $table SET $setClause WHERE $where";
  76. $values = array_merge($values, $whereParams);
  77. $stmt = $this->query($sql, $values);
  78. return $stmt->rowCount();
  79. }
  80. public function delete($table, $where, $params = []) {
  81. $sql = "DELETE FROM $table WHERE $where";
  82. $stmt = $this->query($sql, $params);
  83. return $stmt->rowCount();
  84. }
  85. public function beginTransaction() {
  86. return $this->pdo->beginTransaction();
  87. }
  88. public function commit() {
  89. return $this->pdo->commit();
  90. }
  91. public function rollback() {
  92. return $this->pdo->rollBack();
  93. }
  94. public function lastInsertId() {
  95. return $this->pdo->lastInsertId();
  96. }
  97. }