IMPROVEMENT: add custom credential support to sql() and centralize connection logic

This commit is contained in:
EC2 Default User 2026-05-01 17:39:57 +00:00
parent 746a24e745
commit 7ba2fea659

View File

@ -5,23 +5,55 @@
* *
* *
*/ */
function sql_read($query) { <?php
// Helper function to manage connections cleanly
function get_db_connection($db_host = null, $db_user = null, $db_pass = null) {
global $db; global $db;
if (!isset($db) || is_null($db)) $db = new PDO("mysql:host=".DB_HOST.";",DB_USER,DB_PASS);
$stmt = $db->prepare($query); // If custom credentials are provided, create a fresh, temporary connection
if ($stmt->execute() === false) return ["status" => "error", "query"=>$query]; // This prevents overwriting the global $db with an alternative database
if ($db_host !== null || $db_user !== null || $db_pass !== null) {
$host = $db_host ?? DB_HOST;
$user = $db_user ?? DB_USER;
$pass = $db_pass ?? DB_PASS;
return new PDO("mysql:host=" . $host . ";", $user, $pass);
}
// Otherwise, use or initialize the global connection using constants
if (!isset($db) || is_null($db)) {
$db = new PDO("mysql:host=" . DB_HOST . ";", DB_USER, DB_PASS);
}
return $db;
}
function sql_read($query, $db_host = null, $db_user = null, $db_pass = null) {
$pdo = get_db_connection($db_host, $db_user, $db_pass);
$stmt = $pdo->prepare($query);
if ($stmt->execute() === false) {
return ["status" => "error", "query" => $query];
}
return $stmt->fetchAll(PDO::FETCH_ASSOC); return $stmt->fetchAll(PDO::FETCH_ASSOC);
} }
function sql_write($query) {
global $db; function sql_write($query, $db_host = null, $db_user = null, $db_pass = null) {
if (!isset($db) || is_null($db)) $db = new PDO("mysql:host=".DB_HOST.";",DB_USER,DB_PASS); $pdo = get_db_connection($db_host, $db_user, $db_pass);
$stmt = $db->prepare($query); $stmt = $pdo->prepare($query);
if ($stmt->execute() === false) die ("sql error: $query");
if ($stmt->execute() === false) {
die("sql error: $query");
}
return $stmt->rowCount(); return $stmt->rowCount();
} }
function sql($query) {
if (strpos($query, "SELECT ") === 0) return sql_read($query); function sql($query, $db_host = null, $db_user = null, $db_pass = null) {
else return sql_write($query); // Used trim() and stripos() to catch cases like " select " or "SELECT "
if (stripos(trim($query), "SELECT") === 0) {
return sql_read($query, $db_host, $db_user, $db_pass);
} else {
return sql_write($query, $db_host, $db_user, $db_pass);
}
} }