trying to port web app starter from PHP
This commit is contained in:
Executable
+144
@@ -0,0 +1,144 @@
|
||||
# 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)
|
||||
]);
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user