我是否在 Medoo Framework 中正确处理查询错误?
Am I handling query errors correctly in Medoo Framework?
我正在使用 Medoo Framework 来处理我的数据库查询。它基本上是一个 PDO 包装器,我没有在他们的文档中找到如何处理错误或检查结果,有时它 return 空数组,有时 FALSE 有时 0 等
因为我不明白如何处理错误,这就是我目前正在使用 empty() 做的事情,因为它可以处理 FALSE 、 0 和空数组,我认为这里没问题):
On SELECT (Medoo returns 数组)
// Same as:
// SELECT username FROM accounts WHERE id=$id AND suspended=0
$select = $database->select("accounts",["username"], [
"AND" => [
"id" => $id,
"suspended" => 0
]
]);
// I have to check if Query failed also if row was not found
if (empty($select) === FALSE && count($select) > 0)
{
// It didn't FAIL
// So i get username like this:
$key = array_keys($select)[0];
$username = $select[$key]['username'];
}
else
{
// It FAILED
}
关于 INSERT(Medoo 在此处说 returns INSERT ID)
$insert = $database->insert("accounts", [
"username" => "$username"
]);
// Check if query didn't fail and actually inserted (affected rows i think?)
if (empty($insert) === TRUE OR $insert < 1)
{
// It Failed
}
更新(这实际上是唯一明确的查询,它 returns 影响行)
$update = $database->update("accounts", ["brute_force[+]" => 1], ["id" => $user_id]);
if (empty($update) === TRUE OR $update < 1)
{
// It FAILED
}
// Check if query didn't fail and also affected row
我对这些感到非常困惑和不确定,以至于我很偏执,也许我应该像往常一样完全重写和使用 CodeIgniter。
为了检查 SELECT/UPDATE
语句是否成功,我使用:
if(!$select){
// SELECT failed
}
因为 MEDOO 将 return FALSE
或 0
或 empty Array
如果 SELECT/UPDATE
失败或没有数据 retrieved/updated,并且所有这些东西在 if
语句中等于 FALSE
。对于 INSERT
,如果数据库中的 table 具有 ID
字段作为主键,则可以使用相同的东西;如果你没有主键,那么你可以使用 error()
方法并解析响应来检查错误,因为 MEDOO
将 return 0
即使语句已执行.
update()的return对象是PDOStatement,可以使用它的方法获取更多信息。
$data = $database->update("account", [
"age[+]" => 1
], [
"user_id[>]" => 100
]);
Returns 受最后一个 SQL 语句影响的行数
echo $data->rowCount();
您可以检查它是否大于零或 is_numeric() 函数。
由于之前对此问题的评论,我差点没看 Medoo post 但我很高兴我看了,我想更正之前对该问题的回复中的一些陈述所以潜在的 MeDoo 用户不会被劝阻使用它。
免责声明 - 我使用 Medoo 的所有工作都是使用 mySQL 个数据库。
它是 PDO 的包装器,但提到的其他工具也是如此,所以我不确定该评论的目的。提到的其他工具在 ORM 方面提供了更多功能。因此,他们将所有 endpoints/methods 基于数据库中的单个表,而 Medoo 基于传统的 CRUD 方法,在我看来,这更有意义。如果你不关心 ORM,Medoo 也可以。
您可以通过查看 error() 方法的键 2 来检查任何 select/get/insert/update/delete 错误。如果为NULL,则没有错误发生;如果发生错误,它将包含一条字符串错误消息。
Medoo 确实使用了准备好的语句,也许它在 2015 年没有回来,但现在可以了。
我不确定“未经测试”这一说法的依据是什么。到目前为止我还没有遇到任何错误。
底线:如果您正在寻找使用 PDO 且不关心 ORM 的简单查询构建器,Medoo 可能适合您。
我正在使用 Medoo Framework 来处理我的数据库查询。它基本上是一个 PDO 包装器,我没有在他们的文档中找到如何处理错误或检查结果,有时它 return 空数组,有时 FALSE 有时 0 等
因为我不明白如何处理错误,这就是我目前正在使用 empty() 做的事情,因为它可以处理 FALSE 、 0 和空数组,我认为这里没问题):
On SELECT (Medoo returns 数组)
// Same as:
// SELECT username FROM accounts WHERE id=$id AND suspended=0
$select = $database->select("accounts",["username"], [
"AND" => [
"id" => $id,
"suspended" => 0
]
]);
// I have to check if Query failed also if row was not found
if (empty($select) === FALSE && count($select) > 0)
{
// It didn't FAIL
// So i get username like this:
$key = array_keys($select)[0];
$username = $select[$key]['username'];
}
else
{
// It FAILED
}
关于 INSERT(Medoo 在此处说 returns INSERT ID)
$insert = $database->insert("accounts", [
"username" => "$username"
]);
// Check if query didn't fail and actually inserted (affected rows i think?)
if (empty($insert) === TRUE OR $insert < 1)
{
// It Failed
}
更新(这实际上是唯一明确的查询,它 returns 影响行)
$update = $database->update("accounts", ["brute_force[+]" => 1], ["id" => $user_id]);
if (empty($update) === TRUE OR $update < 1)
{
// It FAILED
}
// Check if query didn't fail and also affected row
我对这些感到非常困惑和不确定,以至于我很偏执,也许我应该像往常一样完全重写和使用 CodeIgniter。
为了检查 SELECT/UPDATE
语句是否成功,我使用:
if(!$select){
// SELECT failed
}
因为 MEDOO 将 return FALSE
或 0
或 empty Array
如果 SELECT/UPDATE
失败或没有数据 retrieved/updated,并且所有这些东西在 if
语句中等于 FALSE
。对于 INSERT
,如果数据库中的 table 具有 ID
字段作为主键,则可以使用相同的东西;如果你没有主键,那么你可以使用 error()
方法并解析响应来检查错误,因为 MEDOO
将 return 0
即使语句已执行.
update()的return对象是PDOStatement,可以使用它的方法获取更多信息。
$data = $database->update("account", [
"age[+]" => 1
], [
"user_id[>]" => 100
]);
Returns 受最后一个 SQL 语句影响的行数
echo $data->rowCount();
您可以检查它是否大于零或 is_numeric() 函数。
由于之前对此问题的评论,我差点没看 Medoo post 但我很高兴我看了,我想更正之前对该问题的回复中的一些陈述所以潜在的 MeDoo 用户不会被劝阻使用它。
免责声明 - 我使用 Medoo 的所有工作都是使用 mySQL 个数据库。
它是 PDO 的包装器,但提到的其他工具也是如此,所以我不确定该评论的目的。提到的其他工具在 ORM 方面提供了更多功能。因此,他们将所有 endpoints/methods 基于数据库中的单个表,而 Medoo 基于传统的 CRUD 方法,在我看来,这更有意义。如果你不关心 ORM,Medoo 也可以。
您可以通过查看 error() 方法的键 2 来检查任何 select/get/insert/update/delete 错误。如果为NULL,则没有错误发生;如果发生错误,它将包含一条字符串错误消息。
Medoo 确实使用了准备好的语句,也许它在 2015 年没有回来,但现在可以了。
我不确定“未经测试”这一说法的依据是什么。到目前为止我还没有遇到任何错误。
底线:如果您正在寻找使用 PDO 且不关心 ORM 的简单查询构建器,Medoo 可能适合您。