145 lines
3.7 KiB
Markdown
Executable File
145 lines
3.7 KiB
Markdown
Executable File
# db.class.php
|
|
|
|
A PHP database abstraction layer for MySQL/MariaDB with caching, parameter binding, and profiling.
|
|
|
|
## Connection
|
|
|
|
```php
|
|
DB::connect() // Auto-connects using config
|
|
DB::isConnected() // Check connection status
|
|
```
|
|
|
|
Uses configuration from `cfg('db/host')`, `cfg('db/user')`, etc.
|
|
|
|
## Basic Queries
|
|
|
|
```php
|
|
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
|
|
```php
|
|
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
|
|
```php
|
|
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
|
|
```php
|
|
DB::Query('SELECT * FROM users WHERE id = ? AND name = ?', [$id, $name]);
|
|
DB::Query('SELECT * FROM users WHERE age > & AND active = ?', [$age, $active]);
|
|
```
|
|
|
|
### Named Parameters
|
|
```php
|
|
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
|
|
|
|
```php
|
|
DB::Keys($table) // Get primary key column names
|
|
DB::Info($table) // Get full column information
|
|
```
|
|
|
|
## Utility Methods
|
|
|
|
```php
|
|
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
|
|
```php
|
|
DB::Query('SELECT * FROM #users') // # replaced with cfg('db/prefix')
|
|
```
|
|
|
|
### Increment/Decrement Operations
|
|
```php
|
|
DB::Update('users', ['id' => 1], ['score+' => 10]); // score = score + 10
|
|
DB::Update('users', ['id' => 1], ['lives-' => 1]); // lives = lives - 1
|
|
```
|
|
|
|
### Caching
|
|
```php
|
|
$users = DB::GetCached('SELECT * FROM users WHERE active = 1');
|
|
// Subsequent calls return cached results
|
|
```
|
|
|
|
### Statistics
|
|
```php
|
|
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
|
|
```php
|
|
// 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
|
|
```php
|
|
// 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)
|
|
]);
|
|
```
|
|
|