【发布时间】:2015-08-16 11:16:10
【问题描述】:
我正在使用 Medoo 框架来处理我的数据库查询。它基本上是一个 PDO 包装器,我在他们的文档中没有找到如何处理错误或检查结果,有时它返回空数组,有时 FALSE 有时 0 等等。
由于我不明白如何处理错误,这就是我目前使用 empty() 所做的,因为它可以处理 FALSE 、 0 和空数组,我认为这里没问题):
在 SELECT 上(Medoo 返回数组)
// 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 说它在这里返回 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
}
更新时(这实际上是唯一的明确查询,它返回受影响的行)
$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。
【问题讨论】:
-
该框架不使用准备好的语句,
UPDATE查询将只为 MySQL 返回受影响的行。如果没有正确使用 PDO,为什么还要使用它?它甚至没有经过测试。您也可以使用直接 PDO 并最终获得相同的 LoC 编号,而且您可以正确处理错误(异常)。 -
仔细一看,那东西声称它是一个数据库框架。不是,它是 PDO 的糟糕包装。您最好使用原始 PDO 或以下任何一种:Eloquent、Doctrine、Propel。至少它们已经过测试、记录在案并且可以正常工作。
-
@Mjh 在太多网站上推荐它作为框架(当我搜索最好的 php 框架时)所以我认为它可能像 CodeIgniter 但只有数据库类(这是我这个项目所需要的)和 CI 将是矫枉过正),我是否正确处理错误?
-
显然那些是错误的网站,快速浏览后我可以识别出多个错误。我不知道您是否正确处理错误,因为那是不一致的。这就是为什么你最好使用普通的 PDO 或我提到的 3 个项目。我会放弃这个 Medoo,它充其量只是一个初学者的应用程序。
-
据我所知,这三个都是 composer-loadable,所以你可以通过 composer 安装它们,然后使用
require_once ('vendor/autoload.php');就可以了。