我在Medoo Framework中正确处理查询错误吗?

时间:2015-06-02 15:08:42

标签: php mysql pdo medoo

我正在使用Medoo Framework来处理我的数据库查询。它基本上是一个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。

3 个答案:

答案 0 :(得分:2)

要检查SELECT/UPDATE语句是否成功,我使用:

if(!$select){ // SELECT failed }

因为如果FALSE失败或没有检索/更新数据,MEDOO将返回0empty ArraySELECT/UPDATE,并且所有这些都是相同的{{1}在FALSE语句中。对于if,如果数据库中的表具有INSERT字段作为主键,则可以使用相同的内容;如果您没有主键,那么您可以使用ID方法并解析响应以检查错误,因为即使语句已执行,error()也将返回MEDOO。 / p>

答案 1 :(得分:0)

update()的返回对象是PDOStatement,因此您可以使用其方法来获取更多信息。

$data = $database->update("account", [
    "age[+]" => 1
], [
    "user_id[>]" => 100
]);

返回上一条SQL语句影响的行数

echo $data->rowCount();

您可以检查其功能是否大于零或is_numeric()函数。

答案 2 :(得分:0)

由于这篇文章之前的评论,我几乎没有看过Medoo,但很高兴我这样做是想更正早先对此问题所作的一些陈述,因此潜在的MeDoo用户不会劝阻其使用。

免责声明-我在Medoo上的所有工作都是在mySQL数据库上进行的。

它是PDO的包装,但是提到了其他工具,因此我不确定该评论的目的。提到的其他工具在ORM方面提供了更多功能。因此,它们的所有端点/方法都基于数据库中的单个表,而Medoo基于传统的CRUD方法,我认为这更有意义。如果您不在乎ORM,Medoo很好。

通过查看error()方法的键2,可以检查是否有任何选择/获取/插入/更新/删除错误。如果为NULL,则没有错误发生;如果发生错误,它将包含字符串错误消息。

Medoo确实使用了准备好的语句,也许它没有追溯到2015年,但现在已经使用了。

我不确定“未经测试”语句的依据是什么。到目前为止,我还没有遇到任何错误。

底线:如果您正在寻找使用PDO且不关心ORM的简单查询构建器,Medoo可能会为您很好地工作。