setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("❌ Connection failed: " . $e->getMessage()); } } return $db; } function insertInto($table, $data) { $db = connectToDb(); $columns = '"' . implode('","', array_keys($data)) . '"'; $placeholders = ':' . implode(', :', array_keys($data)); $sql = "INSERT INTO \"$table\" ($columns) VALUES ($placeholders)"; $stmt = $db->prepare($sql); $stmt->execute($data); return $db->lastInsertId(); } function selectFrom($table, $conditions = []) { $db = connectToDb(); $whereClause = ''; if (!empty($conditions)) { $clauses = []; foreach ($conditions as $key => $value) { $clauses[] = "\"$key\" = :$key"; } $whereClause = 'WHERE ' . implode(' AND ', $clauses); } $sql = "SELECT * FROM \"$table\" $whereClause"; $stmt = $db->prepare($sql); $stmt->execute($conditions); return $stmt->fetchAll(PDO::FETCH_ASSOC); } function update($table, $data, $conditions) { $db = connectToDb(); $setParts = []; foreach ($data as $key => $value) { $setParts[] = "\"$key\" = :set_$key"; } $setClause = implode(', ', $setParts); $whereParts = []; foreach ($conditions as $key => $value) { $whereParts[] = "\"$key\" = :where_$key"; } $whereClause = implode(' AND ', $whereParts); $sql = "UPDATE \"$table\" SET $setClause WHERE $whereClause"; $params = []; foreach ($data as $key => $value) { $params['set_' . $key] = $value; } foreach ($conditions as $key => $value) { $params['where_' . $key] = $value; } $stmt = $db->prepare($sql); return $stmt->execute($params); } function upsert($table, $data, $conflictColumns) { $db = connectToDb(); $columns = '"' . implode('","', array_keys($data)) . '"'; $placeholders = ':' . implode(', :', array_keys($data)); $updateParts = []; foreach ($data as $key => $value) { $updateParts[] = "\"$key\" = EXCLUDED.\"$key\""; } $updateClause = implode(', ', $updateParts); $conflicts = '"' . implode('","', (array)$conflictColumns) . '"'; $sql = "INSERT INTO \"$table\" ($columns) VALUES ($placeholders) ON CONFLICT ($conflicts) DO UPDATE SET $updateClause"; $stmt = $db->prepare($sql); return $stmt->execute($data); }