3.7 KiB
Executable File
3.7 KiB
Executable File
db.class.php
A PHP database abstraction layer for MySQL/MariaDB with caching, parameter binding, and profiling.
Connection
DB::connect() // Auto-connects using config
DB::isConnected() // Check connection status
Uses configuration from cfg('db/host'), cfg('db/user'), etc.
Basic Queries
DB::Query($sql, $params) // Execute any SQL query
DB::Get($sql, $params) // Get multiple rows as array
DB::GetRowWithQuery($sql, $params) // Get single row
DB::GetCached($sql, $params) // Cached version of Get()
CRUD Operations
Reading Data
DB::GetRow($table, $keyvalue) // Get row by primary key
DB::GetRow($table, $id, $keyname) // Get row by specific key
DB::GetRowsMatch($table, $criteria) // Get rows matching criteria
Writing Data
DB::Insert($table, $data) // Insert new row, returns ID
DB::Commit($table, $data) // Insert or update (REPLACE)
DB::Update($table, $where, $data) // Update existing rows
DB::RemoveRow($table, $keyvalue) // Delete row by key
Parameter Binding
Positional Parameters
DB::Query('SELECT * FROM users WHERE id = ? AND name = ?', [$id, $name]);
DB::Query('SELECT * FROM users WHERE age > & AND active = ?', [$age, $active]);
Named Parameters
DB::Query('SELECT * FROM users WHERE name = :name', ['name' => $username]);
DB::Query('SELECT * FROM users WHERE age > ::age', ['age' => 25]); // Number format
Parameter formats:
?- String (escaped)&- Number (unescaped integer):name- Named string parameter::name- Named number parameter
Table Information
DB::Keys($table) // Get primary key column names
DB::Info($table) // Get full column information
Utility Methods
DB::Safe($string) // Escape string for SQL
DB::MakeNamesList($array) // Create column list for INSERT
DB::MakeValuesList($array) // Create values list for INSERT
DB::MakeSetList($array, $separator) // Create SET clause for UPDATE
Advanced Features
Table Prefix Support
DB::Query('SELECT * FROM #users') // # replaced with cfg('db/prefix')
Increment/Decrement Operations
DB::Update('users', ['id' => 1], ['score+' => 10]); // score = score + 10
DB::Update('users', ['id' => 1], ['lives-' => 1]); // lives = lives - 1
Caching
$users = DB::GetCached('SELECT * FROM users WHERE active = 1');
// Subsequent calls return cached results
Statistics
DB::$affectedRows // Rows affected by last operation
DB::$readOps // Count of read operations
DB::$writeOps // Count of write operations
DB::$lastQuery // Last executed query
Examples
Basic Usage
// Insert new user
$userId = DB::Insert('users', [
'name' => 'John Doe',
'email' => 'john@example.com',
'active' => 1
]);
// Get user by ID
$user = DB::GetRow('users', $userId);
// Update user
DB::Update('users', ['id' => $userId], ['last_login' => date('Y-m-d H:i:s')]);
// Find users
$activeUsers = DB::Get('SELECT * FROM users WHERE active = ?', [1]);
Complex Queries
// Named parameters
$results = DB::Get('
SELECT * FROM #posts
WHERE author_id = :author
AND created_date > :date
AND status = :status
', [
'author' => $authorId,
'date' => '2023-01-01',
'status' => 'published'
]);
// Mixed parameter types
DB::Query('UPDATE #users SET score = score + ::points WHERE id = :id', [
'points' => 100, // Number (unescaped)
'id' => $userId // String (escaped)
]);