{"id":31644567,"url":"https://github.com/cloudtay/ripple-database","last_synced_at":"2025-10-07T04:54:09.355Z","repository":{"id":317012019,"uuid":"1065100960","full_name":"cloudtay/ripple-database","owner":"cloudtay","description":"High-performance database connection pool, perfectly compatible with PDO interface, built-in connection pool","archived":false,"fork":false,"pushed_at":"2025-09-28T07:14:42.000Z","size":58,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-28T09:14:13.245Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudtay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-27T04:15:03.000Z","updated_at":"2025-09-28T00:33:38.000Z","dependencies_parsed_at":"2025-09-28T09:14:18.596Z","dependency_job_id":"fd417b7b-90c2-4b40-9650-97d93d70b063","html_url":"https://github.com/cloudtay/ripple-database","commit_stats":null,"previous_names":["cloudtay/ripple-database"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/cloudtay/ripple-database","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudtay%2Fripple-database","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudtay%2Fripple-database/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudtay%2Fripple-database/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudtay%2Fripple-database/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudtay","download_url":"https://codeload.github.com/cloudtay/ripple-database/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudtay%2Fripple-database/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278722768,"owners_count":26034461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-07T04:54:06.613Z","updated_at":"2025-10-07T04:54:09.350Z","avatar_url":"https://github.com/cloudtay.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ripple DB\n\n⚡️ 高性能数据库连接池, 完美兼容PDO接口, 内置连接池\n\n| 驱动类型    | 支持  |\n|---------|-----|\n| `MySQL` | 已支持 |\n| `...`   | 暂无  |\n\n## 一键安装\n\n```bash\ncomposer require cloudtay/ripple-database\n```\n\n### 快速开始\n\n```php\n\u003c?php declare(strict_types=1);\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\nuse Ripple\\Database\\PDO;\n\n$dsn = \"mysql:host=127.0.0.1;port=3306;dbname=test_db;charset=utf8mb4\";\n$pdo = new PDO($dsn, 'root', '123456');\n\n// 创建表\n$pdo-\u003eexec(\"CREATE TABLE IF NOT EXISTS users (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    name VARCHAR(100) NOT NULL,\n    email VARCHAR(255) UNIQUE\n)\");\n\n// 预处理语句\n$stmt = $pdo-\u003eprepare(\"INSERT INTO users (name, email) VALUES (?, ?)\");\n$stmt-\u003eexecute(['Alice', 'alice@example.com']);\n\n// 查询数据\n$result = $pdo-\u003equery(\"SELECT * FROM users WHERE name = 'Alice'\")-\u003efetch();\necho \"User: {$result['name']} - {$result['email']}\\n\";\n```\n\n#### 连接选项\n\n| 配置项                       | 类型  | 默认值   | 描述        |\n|---------------------------|-----|-------|-----------|\n| ...                       | ... |       | PDO默认选项类表 |\n| `pool_max`                | 整数  | `20`  | 最大连接数     |\n| `pool_min`                | 整数  | `5`   | 最小连接数     |\n| `pool_connection_timeout` | 整数  | `300` | 连接超时时间(秒) |\n\n```php\n$pool = new PDOPool($dsn, $user, $password, [\n    // PDO选项\n    PDO::ATTR_DEFAULT_FETCH_MODE =\u003e PDO::FETCH_ASSOC,\n\n    // 连接池选项\n    'pool_max' =\u003e 20,                    // 最大连接数,自动扩容\n    'pool_min' =\u003e 5,                     // 最小连接数,初始化时自动连接\n    'pool_connection_timeout' =\u003e 300,   // 连接超时时间(惰性检查)\n]);\n```\n\n## 兼容性\n\n### 已兼容的PDO方法\n\n| 方法名                          | 描述           | 支持状态  |\n|------------------------------|--------------|-------|\n| `PDO::prepare()`             | 预处理语句        | 支持    |\n| `PDO::query()`               | 执行查询         | 支持    |\n| `PDO::exec()`                | 执行语句并返回受影响行数 | 支持    |\n| `PDO::lastInsertId()`        | 获取最后插入 ID    | 支持    |\n| `PDO::beginTransaction()`    | 开始事务         | 支持    |\n| `PDO::commit()`              | 提交事务         | 支持    |\n| `PDO::rollBack()`            | 回滚事务         | 支持    |\n| `PDO::inTransaction()`       | 检查是否在事务中     | 支持    |\n| `PDO::setAttribute()`        | 设置PDO属性      | 支持    |\n| `PDO::getAttribute()`        | 获取PDO属性      | 支持    |\n| `PDO::errorCode()`           | 获取错误代码       | 支持    |\n| `PDO::errorInfo()`           | 获取错误信息       | 支持    |\n| `PDO::getAvailableDrivers()` | 获取可用驱动列表     | 支持    |\n| `PDO::status()`              | 获取连接池状态信息    | 连接池独有 |\n| `PDO::close()`               | 关闭连接池        | 连接池独有 |\n| `PDO::quote()`               | 引号转义         | 不支持   |\n\n### 类型兼容性\n\n与原生PDO在数据类型处理上完全一致, 确保数据存储和检索的准确性。\n\n| 数据类型    | MySQL 类型                                        | 强等于校验 |\n|---------|-------------------------------------------------|-------|\n| 整数类型    | `TINYINT`, `SMALLINT`, `INT`, `BIGINT`          | 通过    |\n| 浮点类型    | `FLOAT`, `DOUBLE`, `DECIMAL`                    | 通过    |\n| 字符串类型   | `CHAR`, `VARCHAR`, `TEXT`                       | 通过    |\n| 二进制类型   | `BLOB`                                          | 通过    |\n| JSON 类型 | `JSON`                                          | 通过    |\n| 日期时间    | `DATE`, `DATETIME`, `TIMESTAMP`, `TIME`, `YEAR` | 通过    |\n| 布尔类型    | `BOOLEAN`                                       | 通过    |\n| 枚举类型    | `ENUM`, `SET`                                   | 通过    |\n\n项目包含完整的类型兼容性测试, 确保与原生PDO的行为完全一致：\n\n```php\n// 测试覆盖的数据类型\n$testData = [\n    'tiny_col' =\u003e 1,                    // TINYINT\n    'small_col' =\u003e 32000,               // SMALLINT\n    'int_col' =\u003e 2147483647,            // INT\n    'big_col' =\u003e 9223372036854775807,   // BIGINT\n    'float_col' =\u003e 3.14159,             // FLOAT\n    'double_col' =\u003e 2.718281828459,     // DOUBLE\n    'decimal_col' =\u003e '12345.67',        // DECIMAL\n    'char_col' =\u003e 'char_text',          // CHAR\n    'varchar_col' =\u003e 'varchar_text',    // VARCHAR\n    'text_col' =\u003e 'this is text',       // TEXT\n    'blob_col' =\u003e random_bytes(16),     // BLOB\n    'json_col' =\u003e json_encode(['a' =\u003e 1, 'b' =\u003e 2]), // JSON\n    'date_col' =\u003e '2025-09-20',         // DATE\n    'datetime_col' =\u003e '2025-09-20 19:00:00', // DATETIME\n    'timestamp_col' =\u003e '2025-09-20 19:00:00', // TIMESTAMP\n    'time_col' =\u003e '12:34:56',           // TIME\n    'year_col' =\u003e 2025,                 // YEAR\n    'bool_col' =\u003e 1,                    // BOOLEAN\n    'enum_col' =\u003e 'b',                  // ENUM\n    'set_col' =\u003e 'x,y',                 // SET\n    'emoji_col' =\u003e '😀🚀✨'            // UTF-8 Emoji\n];\n```\n\n## 用法示例\n\n### 连接池使用\n\n```php\n\u003c?php declare(strict_types=1);\n\nrequire __DIR__ . '/../vendor/autoload.php';\n\nuse Ripple\\Database\\PDOPool;\nuse Ripple\\Sync\\Channel;\nuse Ripple\\Sync\\WaitGroup;\n\nuse function Co\\go;\n\n$dsn = \"mysql:host=127.0.0.1;port=3306;dbname=test_db;charset=utf8mb4\";\n$pdo = new PDOPool($dsn, 'root', '123456', [\n    'pool_max' =\u003e 10,\n    'pool_min' =\u003e 2\n]);\n\n$channel = new Channel(10);\nfor ($i = 0; $i \u003c 10; $i++) {\n    go(static function () use ($pdo, $channel) {\n        $result = $pdo-\u003equery(\"SELECT SLEEP(1);\");\n        $channel-\u003esend($result);\n    });\n}\n\nwhile ($result = $channel-\u003ereceive()) {\n    echo json_encode($result-\u003efetch(), JSON_UNESCAPED_UNICODE) . PHP_EOL;\n}\n```\n\n### 事务处理\n\n```php\n\u003c?php\n\nuse Ripple\\Database\\PDO;\n\n$pdo = new PDO($dsn, 'root', '123456');\n\ntry {\n    $pdo-\u003ebeginTransaction();\n\n    $stmt1 = $pdo-\u003eprepare(\"UPDATE accounts SET balance = balance - ? WHERE name = ?\");\n    $stmt1-\u003eexecute([100.00, 'Alice']);\n\n    $stmt2 = $pdo-\u003eprepare(\"UPDATE accounts SET balance = balance + ? WHERE name = ?\");\n    $stmt2-\u003eexecute([100.00, 'Bob']);\n\n    $pdo-\u003ecommit();\n    echo \"Transaction completed successfully\\n\";\n\n} catch (Exception $e) {\n    $pdo-\u003erollback();\n    echo \"Transaction failed: \" . $e-\u003egetMessage() . \"\\n\";\n}\n```\n\n## 许可证\n\nMIT License\n\n## 作者\n\ncclilshy \u003cjingnigg@gmail.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudtay%2Fripple-database","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudtay%2Fripple-database","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudtay%2Fripple-database/lists"}