36 lines
1.1 KiB
PHP
36 lines
1.1 KiB
PHP
|
|
<?php
|
||
|
|
/**
|
||
|
|
* Returns a shared PDO connection to the MySQL database.
|
||
|
|
* Also ensures the `is_read` column exists (added after initial deploy).
|
||
|
|
*/
|
||
|
|
function get_db(): PDO {
|
||
|
|
static $pdo = null;
|
||
|
|
if ($pdo !== null) return $pdo;
|
||
|
|
|
||
|
|
$host = getenv('DB_HOST') ?: 'db';
|
||
|
|
$name = getenv('DB_NAME') ?: 'alwisp';
|
||
|
|
$user = getenv('DB_USER') ?: '';
|
||
|
|
$pass = getenv('DB_PASS') ?: '';
|
||
|
|
|
||
|
|
$pdo = new PDO(
|
||
|
|
"mysql:host=$host;dbname=$name;charset=utf8mb4",
|
||
|
|
$user, $pass,
|
||
|
|
[
|
||
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||
|
|
]
|
||
|
|
);
|
||
|
|
|
||
|
|
// Auto-migrate: add is_read if the DB was initialised before this column existed
|
||
|
|
$col_exists = $pdo->query(
|
||
|
|
"SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
|
||
|
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'contacts' AND COLUMN_NAME = 'is_read'"
|
||
|
|
)->fetchColumn();
|
||
|
|
|
||
|
|
if (!$col_exists) {
|
||
|
|
$pdo->exec("ALTER TABLE contacts ADD COLUMN is_read TINYINT(1) NOT NULL DEFAULT 0");
|
||
|
|
}
|
||
|
|
|
||
|
|
return $pdo;
|
||
|
|
}
|