stefangabos/zebra_database

一个高级、紧凑且轻量级的MySQL数据库包装库,基于PHP的MySQLi扩展构建。

2.11.1 2024-01-28 09:03 UTC

README

zebrajs

Zebra Database  Tweet

一个紧凑、轻量且功能丰富的PHP MySQLi数据库包装器,提供了比PHP默认方式更安全、强大和直观的与MySQL数据库交互的方法。

Latest Stable Version Total Downloads Monthly Downloads Daily Downloads License

Zebra_Database支持事务,并提供通过将缓存数据保存到磁盘、会话、使用memcacheredis来缓存查询结果的方式。

该库提供全面的调试界面,包含执行查询的详细信息:执行时间、返回/影响的行数、找到的行的摘录、错误消息、回溯信息等。它还可以自动EXPLAIN SELECT查询(这样就不会再次错过那些键了!)。

在从CLI(命令行界面)调用时可以提供调试信息,并支持通过AJAX请求记录查询。

它鼓励开发者编写可维护的代码,并通过鼓励使用预处理语句来提供更好的默认安全层,其中参数将被自动转义

代码注释详尽,在PHP的错误报告级别设置为E_ALL时不会生成警告/错误/通知。


🔬 请查看调试控制台的实际操作

特性

  • 它使用mysqli扩展与数据库通信,而不是旧的mysql扩展,该扩展自PHP v5.5.0起已正式弃用,并将在未来被移除;这并不是PDO扩展的包装器,因为PDO本身就是一个包装器!

  • 即使在从CLI(命令行界面)调用时也可以提供调试信息

  • 记录所有查询,包括通过AJAX运行的查询

  • 提供了许多强大的方法,以便更容易地与MySQL交互

  • 支持无缓冲查询

  • 通过鼓励使用预处理语句(其中参数将被自动转义)提供更好的安全层

  • 提供非常详细的调试界面,包含有关执行查询的许多有用信息;它还自动EXPLAIN每个SELECT查询

  • 支持将查询结果缓存到磁盘、会话或memcacheredis服务器

  • 非常好的文档

  • 代码注释详尽,当PHP的错误报告级别设置为E_ALL时,不会产生警告、错误或通知

Zebra_Database's debugging console

📔 文档

查看这个出色的文档

🎂 支持本项目的发展

您的支持非常受欢迎,它激励我继续从事开源项目。如果您喜欢这个项目,请通过点击页面顶部的星形按钮给它评分。如果您觉得慷慨,也可以通过PayPal给我买杯咖啡或者成为赞助商。感谢您的支持! 🎉

Star it on GitHub Donate

要求

PHP 5.4.0+,并激活了mysqli扩展,MySQL 4.1.22+

若使用memcache作为缓存方法,PHP必须编译了memcache扩展,并且如果memcache_compressed属性设置为TRUE,则需要使用–with-zlib[=DIR]进行配置

若使用redis作为缓存方法,PHP必须编译了redis扩展,并且如果redis_compressed属性设置为TRUE,则需要使用–with-zlib[=DIR]进行配置

安装

您可以通过Composer安装Zebra Database

# get the latest stable release
composer require stefangabos/zebra_database

# get the latest commit
composer require stefangabos/zebra_database:dev-master

或者您可以通过下载最新版本,解压,然后将它包含到您的项目中手动安装

require_once 'path/to/Zebra_Database.php';

如何使用

连接到数据库
// instantiate the library
$db = new Zebra_Database();

// connect to a server and select a database
$db->connect('host', 'username', 'password', 'database');
运行查询
// question marks will re replaced automatically with the escaped values from the array
// I ENCOURAGE YOU TO WRITE YOUR QUERIES IN A READABLE FORMAT, LIKE BELOW
$db->query('
    SELECT
    	column1
        , column2
        , column3
    FROM
    	tablename1
    	LEFT JOIN tablename2 ON tablename1.column1 = tablename2.column1
    WHERE
    	somecriteria = ?
        AND someothercriteria = ?
', array($somevalue, $someothervalue));

// any fetch method will work with the last result so
// there's no need to explicitly pass that around

// you could fetch all records to one associative array...
$records = $db->fetch_assoc_all();

// you could fetch all records to one associative array
// using the values in a specific column as keys
$records = $db->fetch_assoc_all('column1');

// or fetch records one by one, as associative arrays
while ($row = $db->fetch_assoc()) {
    // do stuff
}
一个INSERT语句
// notice that you can use MySQL functions in values
$db->insert(
    'tablename',
    array(
        'column1'      => $value1,
        'column2'      => $value2,
        'date_updated' => 'NOW()'
    )
);
一个UPDATE语句
// $criteria will be escaped and enclosed in grave accents, and will
// replace the corresponding ? (question mark) automatically
// also, notice that you can use MySQL functions in values
// when using MySQL functions, the value will be used as it is without being escaped!
// while this is ok when using a function without any arguments like NOW(), this may
// pose a security concern if the argument(s) come from user input.
// in this case we have to escape the value ourselves
$db->update(
    'tablename',
    array(
        'column1'      => $value1,
        'column2'      => 'TRIM(UCASE("value2"))',
        'column3'      => 'TRIM(UCASE("'' . $db->escape($value3) . "))',
        'date_updated' => 'NOW()'
    ),
    'criteria = ?',
    array($criteria)
);

该库有超过40个方法和20个属性可供使用,以及许多您可以做的事情。我准备了一个出色的文档,以便您能够轻松了解可以做什么。去查看吧!