admin-portal/tech/api/_dbFuncs.php
Frederico Falcao f2a6525224 init
2025-05-30 10:46:17 +01:00

102 lines
2.6 KiB
PHP

<?php
function connectToDb() {
static $db = null;
if ($db === null) {
$dsn = "pgsql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME;
try {
$db = new PDO($dsn, DB_USER, DB_PASSWORD);
$db->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);
}