102 lines
2.6 KiB
PHP
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);
|
|
}
|