apex/db

轻量级,直观的数据库接口

安装: 939

依赖: 4

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 1

开放问题: 0

类型:package

2.1 2023-10-20 08:27 UTC

README

一个轻量级数据库层,旨在简单易用,在大型ORM和基础PHP函数(即mysqli_*)之间提供一个中间地带。支持多种数据库引擎,对象映射,Doctrine和Eloquent的初始化包装器,连接负载均衡,以及一个可选的包装器,允许以静态方式访问方法。它支持

  • 支持MySQL、PostgreSQL和SQLite,并具有轻松实现其他引擎的能力。
  • 自动将对象映射到/从对象。
  • 自动准备所有SQL查询以防止SQL注入。
  • 类型化、顺序和命名的占位符
  • Doctrine和Eloquent的初始化包装器
  • 可选的次要只读连接参数,当执行必要的SQL查询时,会自动切换到写入连接。
  • 可选的Redis支持,带有连接管理器,允许在多个服务器实例之间轻松维护连接信息,并通过轮询自动进行多个只读连接的负载均衡。
  • 用于在Redis中轻松管理连接信息的命令行工具(和PHP类)。
  • 可选的内置支持Apex Debugger,它将记录请求期间执行的SQL查询到调试会话中,以便稍后分析。
  • 包装类允许以静态方式访问方法,以提高效率和简化。

安装

使用Composer安装

composer require apex/db

目录

  1. 数据库连接
  2. SQL数据库方法(26个方法)
    1. insert()
    2. update()
    3. insertOrUpdate()
    4. query()
    5. getRow()
    6. getIdRow()
    7. getObject()
    8. getIdObject()
    9. getField()
    10. getColumn()
    11. getHash()
  3. 占位符
  4. 对象映射
  5. 附加/补充
    1. 大SQL文件的SQL解析器
    2. 使用Redis和连接管理器
    3. 利用Apex Debugger
    4. Db包装器以静态方式访问方法
    5. Doctrine、Eloquent和PDO的初始化包装器

基本用法

use Apex\Db\Drivers\mySQL\mySQL;

$db = new mySQL([
    'dbname' => 'mydb', 
    'user' => 'myuser', 
    'password' => 'mydb_password'
]);

// Insert a record
$db->insert('users', [
    'username' => 'jsmith', 
    'full_name' => 'John Smith', 
    'email' => 'jsmith@domain.com'
);
$userid = $db->insertId();

// Get single user by id#
if (!$profile = $db->getIdRow('users', $userid)) { 
    die("No user at id# $userid");
}

// Get single field
if (!$email = $db->getField("SELECT email FROM users WHERE id = %i", $userid)) { 
    die("No e-mail exists for user id# $userid");
}
echo "E-mail is: $email\n";

// Go through all users with @domain.com e-mail
$domain = '@domain.com';
$rows = $db->query("SELECT * FROM users WHERE email LIKE %ls", $domain);
foreach ($rows as $row) { 
    echo "Found: $row[username] - $row[full_name]\n";
}

对象映射

通过简单地将对象传递给写入方法,并调用一个静态方法将结果映射到对象,可以轻松地将对象映射到/从对象。例如

use Apex\Db\Drivers\mySQL\mySQL;
use Apex\Db\Mapper\ToInstance;
use MyApp\Models\UserModel;

$db = new mySQL([
    'dbname' => 'mydb', 
    'user' => 'myuser', 
    'password' => 'mydb_password'
]);

// Get users
$rows = $db->"SELECT * FROM users WHERE group_id = 2");
foreach ($rows as $row) {
    $user = ToInstance::map(UserModel::class, $row);
    // $user is a UserModel object, injected and instantiated
}

// Get specific user
$userid = 5811;
$row = $db->getIdRow('users', $userid);    /// $user  is a UserModel object
$user = ToInstance::map(UserModel::class, $row);

// Insert new user
$user = new UserModel($my, $constructor, $params);
$db->insert('users', $user);

// Unsure if inserting or updating?  No problem.
$db->insertOrUpdate('users', $user);

关注Apex

在不久的将来会有很多好事到来,包括新的高质量开源软件包,更高级的文章/教程,涵盖实用的主题等。通过加入我们网站上的邮件列表或关注Twitter上的@mdizak1来保持信息畅通。