新增功能 V2.1
修复了错误,更好地支持 Oracle,性能略有提升。
BETWEEN 的 Raw 使用
$this->database->select("account", "user_name", [ "birthday[<>]" => [ Medoo::raw("to_date(:from, 'YYYY-MM-DD')", [":from" => '2015/05/15']), Medoo::raw("to_date(:to, 'YYYY-MM-DD')", [":to" => '2025/05/15']) ] ]);
生成的 SQL:
SELECT "user_name" FROM "account" WHERE ("birthday" BETWEEN to_date('2015/05/15', 'YYYY-MM-DD') AND to_date('2025/05/15', 'YYYY-MM-DD'))
Oracle 的 LOB 支持
更好地支持 Oracle 数据库的 LOB 插入和更新。
$fp = fopen('foo.dat', 'r'); $database->insert("ACCOUNT", [ "NAME" => "foo", "DATA" => $fp ], "ID"); $database->update("ACCOUNT", [ "DATA" => $fp ], [ "ID" => 1 ]);
匹配表名和列名的正则表达式为:[\p{L}_][\p{L}\p{N}@$#\-_]+。
新增功能 V2.0
Medoo 的里程碑版本。我们用更标准和可靠的代码更新了整个项目,包括一些新功能和重大改进。我们还更新并重新设计了官方文档网站。
错误初始化选项
新的错误选项,用于指示如何处理错误信息。
$database = new Medoo([ // 可以设置为 PDO::ERRMODE_SILENT, PDO::ERRMODE_WARNING, PDO::ERRMODE_EXCEPTION // 默认为 PDO::ERRMODE_SILENT 'error' => PDO::ERRMODE_SILENT ]);
简化的连接选项
这些选项名称已简化(当然您仍然可以使用旧的选项名称)。
database_type -> type database_name -> database server -> host
新方式:
$database = new Medoo([ 'type' => 'mysql', 'host' => 'localhost', 'database' => 'name', 'username' => 'your_username', 'password' => 'your_password', ]);
旧方式:
$database = new Medoo([ 'database_type' => 'mysql', 'database_name' => 'name', 'server' => 'localhost', 'username' => 'your_username', 'password' => 'your_password', ]);
Select() 的新回调闭包
高性能的方式,立即输出数据而无需将其加载到内存中。
$database->select("account", ["name"], function ($data) { echo $data["name"]; });
从 Action() 获取结果的新方法
要从 action() 获取结果,您可以使用 use 关键字为闭包提供引用变量,然后从外部获取它。
$result = ""; $database->action(function($database) use (&$result) { $database->insert("account", [ "user_name" => "foo" ]); $newId = $database->id(); $result = "The account is created, id is {$newId}."; }); echo $result;
获取错误信息的新方法
函数 $database->error() 已被移除。只需读取 $database->error 或 $database->errorInfo 来获取最后执行时的错误信息。
$database->insert("account", [ "user_name" => "foo" ]); var_dump($database->error); var_dump($database->errorInfo);
Oracle 上的最后插入 ID
如果想要获取 Oracle 上的最后插入 ID,请提供主键作为 insert() 的第三个参数,并从 id() 获取它。
$database->insert("ACCOUNT", ["NAME" => "foo"], "ID"); var_dump($database->id());
调试日志
要调试整个或部分项目而无需在每个调用中放置 debug(),您可以使用 beginDebug() 开始调试日志记录,然后调用 debugLog() 停止它并将所有调试日志作为数组获取。
// 开始调试日志记录 $database->beginDebug(); // 所有这些函数将不会被执行,但会将其保存为调试日志。 $database->select()...... $database->update()..... // 调用 debugLog() 停止调试日志记录并返回所有调试日志作为数组。 var_dump($database->debugLog()); // 将输出: // array(2) { // [0]=> string(10) "SELECT ... FROM" // [1]=> string(10) "UPDATE ... SET ... WHERE ..." // }
使用 Raw 对象和附加条件进行 Join
$database->select("post", [ "[>]comment" => [ "author_id" => "user_id", "AND" => [ "rate[>]" => 50 ] ], "[>]account" => Medoo::raw("ON= ") ], [ "post.content", "comment.content", "account.name" ]);
其他更新:
- 符合 PSR-2 标准。
- 包含测试用例。
- 包含 PHPDoc 注释。
- 放弃对 PHP 5.4 的支持,最低要求为 PHP 7.3+。
- 更好地支持 MSSQL 和 Oracle。
- 支持使用 Unicode 字符作为表/列名。