Medoo 已停止维护,composer require medoo/medoo 默认安装的 v2.3.4 不兼容 PHP 8.2+ 和 MySQL 8.0.31+,存在动态属性报错、认证插件不支持等问题,推荐改用 spiral/database 或 doctrine/dbal。

Medoo 不再维护,Composer 安装会失败或拉取到废弃版本 —— 直接用 composer require medoo/medoo 会安装 v2.3.4(2022 年最后更新),但该版本已不兼容 PHP 8.2+,且无安全更新。
为什么 composer require medoo/medoo 现在不推荐
Medoo 官方仓库早在 2022 年归档(Archived),medoo/medoo 包未标记为废弃,但 Composer 仍能拉取旧版。问题包括:
- PHP 8.2+ 报
Deprecated: Creation of dynamic property错误(因使用动态属性未声明) - MySQL 8.0.31+ 的默认认证插件(
caching_sha2_password)不被 v2.3.4 原生支持 - 无 PSR-14 事件、无连接池、无 prepared statement 自动绑定参数类型推导
- GitHub Issues 全部关闭,无法提交 Bug 或 PR
替代方案:用更活跃的轻量级库(推荐 spiral/database 或 doctrine/dbal)
如果坚持要「Medoo 风格」(链式查询、单文件易理解、无 ORM 负担),可用以下两个仍在维护的替代品:
-
spiral/database:现代、支持协程、DSL 接近 Medoo,但需搭配spiral/prototype或手动配 PDO —— 安装命令:composer require spiral/database -
doctrine/dbal:稳定、文档全、兼容性极好,虽稍重但提供QueryBuilder,写法比原生 PDO 更简洁 —— 安装命令:composer require doctrine/dbal - 若项目极小(如单页工具脚本),可直接用 PDO + 封装 20 行函数,比引入废弃库更可控
真要装 Medoo?必须加版本锁并补丁
仅限遗留项目兼容或学习目的。执行以下操作才可能跑通:
- 指定兼容 PHP 8.1 的最后一个可用 tag:
composer require medoo/medoo:^2.2(避开 2.3.x 的动态属性问题) - 在
composer.json中添加平台配置,锁定 PHP 版本:"config": {"platform": {"php": "8.1.28"}} - 手动 patch
Medoo.php:在类开头加public $database_type;等属性声明,否则 PHP 8.2+ 直接 Fatal Error - 连接时显式指定 PDO 选项:
'option' => [PDO::ATTR_EMULATE_PREPARES => true],绕过 MySQL 8 认证插件问题
Medoo 的核心价值是「够简单」,但现在它的「简单」已变成「隐性维护成本」——尤其当错误只在升级 PHP 或换 MySQL 版本后才暴露时,排查路径远比换一个活跃库更长。










