我可以在数据库查询中使用异常吗?

时间:2010-01-11 21:35:24

标签: php

是否可以在mysql查询结束时使用异常而不是die()?我想抛出异常并记录它而不是杀死脚本。

是否可以这样做:

mysql_query(...) or throw new exception()??

4 个答案:

答案 0 :(得分:1)

这是我通常这样做的方式。我将数据库放在包装器类中,因此$this只是引用包装器。

private function throwException($query = null)
{
    $msg = mysql_error().".  Query was:\n\n".$query.
                   "\n\nError number: ".mysql_errno();
    throw new Exception($msg);
}

public function query($query_string)
{
    $this->queryId = mysql_query($query_string);
    if (! $this->queryId) {
        $this->throwException($query_string);
    }
    return $this->queryId;
}

为我打包一个很好的错误消息,所以我可以看到问题查询。当然,你可以保持简单,并且做到:

mysql_query($sql) or throw new Exception("Problem with query: ".$sql);

答案 1 :(得分:0)

是。您几乎可以在传统上使用die/exit的任何地方使用例外。

答案 2 :(得分:0)

是的,您可以抛出异常而不是杀死脚本。

答案 3 :(得分:0)

您的代码可以正常使用:

mysql_query(...) or throw new Exception("Failed to run query");

但它使用的速记并不完全清楚。我个人认为你最好为了清晰而牺牲简洁:

if (false === mysql_query(...)) {
    throw new Exception("Failed to run query.");
}

请记住,抛出异常仅在您将其捕获到某处时才有用,在您的情况下,您可能希望使用自定义异常:

class DatabaseException extends Exception {}

try {
    if (false === mysql_query(...)) {
        throw new DatabaseException("Failed to run query.");
    }
} catch (DatabaseException $e) {
    $logger->log("Database exception: " . $e->getMessage());
}

希望有所帮助!