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)
]);
```