Medoo

开始

更新日志

Where 语句

查询

聚合

Fetch

事务

管理

原生SQL查询

Raw object

PDO object

Debug

数据库信息

新增功能 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"
]);

其他更新: