$id]); } /** * Insert a new record * * @param array $data Association array of columns and values * @return string Last inserted primary key ID */ public static function create(array $data): string { $table = static::getSafeTable(); $columnKeys = array_keys($data); static::validateColumns($columnKeys); $columns = implode(', ', $columnKeys); $placeholders = ':' . implode(', :', $columnKeys); $sql = "INSERT INTO {$table} ({$columns}) VALUES ({$placeholders})"; return Database::insert($sql, $data); } /** * Update an existing record * * @param mixed $id Primary key ID * @param array $data Associative array of changes * @return int Affected rows count */ public static function update($id, array $data): int { $id = is_numeric($id) ? (int)$id : $id; $table = static::getSafeTable(); $primaryKey = static::getSafePrimaryKey(); $columnKeys = array_keys($data); static::validateColumns($columnKeys); $sets = []; foreach ($columnKeys as $column) { $sets[] = "{$column} = :{$column}"; } $setSql = implode(', ', $sets); $sql = "UPDATE {$table} SET {$setSql} WHERE {$primaryKey} = :_id"; $params = $data; $params['_id'] = $id; return Database::execute($sql, $params); } /** * Delete record by ID */ public static function delete($id): int { $id = is_numeric($id) ? (int)$id : $id; $table = static::getSafeTable(); $primaryKey = static::getSafePrimaryKey(); $sql = "DELETE FROM {$table} WHERE {$primaryKey} = :id"; return Database::execute($sql, ['id' => $id]); } }