php实现自定义数据库
PHP 实现自定义数据库的方法
使用文件存储实现简易数据库
PHP 可以通过文件系统实现简单的键值存储数据库。以下是一个基本示例:
class SimpleDB {
private $file;
public function __construct($file) {
$this->file = $file;
}
public function set($key, $value) {
$data = $this->getAll();
$data[$key] = $value;
file_put_contents($this->file, json_encode($data));
}
public function get($key) {
$data = $this->getAll();
return $data[$key] ?? null;
}
public function getAll() {
if (!file_exists($this->file)) {
return [];
}
$content = file_get_contents($this->file);
return json_decode($content, true) ?: [];
}
}
// 使用示例
$db = new SimpleDB('data.db');
$db->set('name', 'John');
echo $db->get('name'); // 输出 John
使用 SQLite 扩展
PHP 内置 SQLite 支持,可以创建轻量级数据库:

$db = new SQLite3('mydatabase.db');
$db->exec('CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)');
$db->exec('INSERT INTO users (name) VALUES ("Alice")');
$result = $db->query('SELECT * FROM users');
while ($row = $result->fetchArray()) {
echo $row['name'];
}
实现关系型数据库功能
对于更复杂的需求,可以实现基本的关系型数据库功能:

class Table {
private $name;
private $columns = [];
private $data = [];
public function __construct($name, $columns) {
$this->name = $name;
$this->columns = $columns;
}
public function insert($row) {
$this->data[] = array_combine($this->columns, $row);
}
public function select($where = null) {
if (!$where) {
return $this->data;
}
return array_filter($this->data, $where);
}
}
// 使用示例
$users = new Table('users', ['id', 'name', 'email']);
$users->insert([1, 'John', 'john@example.com']);
$results = $users->select(function($row) {
return $row['name'] === 'John';
});
实现索引功能
为提高查询效率,可以添加索引功能:
class IndexedDB extends SimpleDB {
private $indexes = [];
public function createIndex($field) {
$this->indexes[$field] = [];
$data = $this->getAll();
foreach ($data as $key => $value) {
if (isset($value[$field])) {
$this->indexes[$field][$value[$field]] = $key;
}
}
}
public function findByIndex($field, $value) {
if (!isset($this->indexes[$field][$value])) {
return null;
}
return $this->get($this->indexes[$field][$value]);
}
}
数据持久化与安全性
确保数据安全和持久化需要考虑以下方面:
// 数据加密存储
public function secureSet($key, $value, $password) {
$iv = openssl_random_pseudo_bytes(16);
$encrypted = openssl_encrypt(
json_encode($value),
'AES-256-CBC',
hash('sha256', $password),
0,
$iv
);
$data = base64_encode($iv.$encrypted);
parent::set($key, $data);
}
// 防止并发写入
public function safeSet($key, $value) {
$lock = fopen($this->file.'.lock', 'w');
flock($lock, LOCK_EX);
parent::set($key, $value);
flock($lock, LOCK_UN);
fclose($lock);
}
这些方法展示了如何使用 PHP 实现不同级别的自定义数据库功能,从简单的键值存储到更复杂的关系型结构。实际应用中应根据具体需求选择合适的方法或组合使用多种技术。






