load(); $host = $_ENV['DB_HOST']; $db = $_ENV['DB_DATABASE']; $user = $_ENV['DB_USERNAME']; $pass = $_ENV['DB_PASSWORD']; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $this->pdo = new PDO($dsn, $user, $pass, $options); } catch (PDOException $e) { die("Database connection failed: " . $e->getMessage()); } } public static function getInstance() { if (self::$instance === null) { self::$instance = new DBHandlerSelect(); } return self::$instance; } public function getConnection() { return $this->pdo; } // Ritorna tutte le righe di una SELECT parametrizzata public function select($sql, $params = []) { $stmt = $this->pdo->prepare($sql); $stmt->execute($params); return $stmt->fetchAll(); } // Ritorna una sola riga (o null se non trova niente) public function selectOne($sql, $params = []) { $stmt = $this->pdo->prepare($sql); $stmt->execute($params); $row = $stmt->fetch(); return $row === false ? null : $row; } // Conta le righe di una query (comodo per le card) public function count($sql, $params = []) { $stmt = $this->pdo->prepare($sql); $stmt->execute($params); return $stmt->rowCount(); } // Inserisce una riga e ritorna l'id appena creato. // $data รจ un array associativo colonna => valore. public function insert($table, $data) { $cols = array_keys($data); $place = array_fill(0, count($cols), '?'); // i backtick proteggono nomi di tabella/colonna con trattini (es. `trf-details`) $colList = '`' . implode('`, `', $cols) . '`'; $sql = "INSERT INTO `$table` ($colList) VALUES (" . implode(', ', $place) . ")"; $stmt = $this->pdo->prepare($sql); $stmt->execute(array_values($data)); return $this->pdo->lastInsertId(); } }