Могу ли я использовать исключение с запросом к базе данных? - PullRequest
3 голосов
/ 12 января 2010

Можно ли использовать исключение в конце запроса MySQL вместо die ()? Я хотел бы выдать исключение и записать его в журнал вместо того, чтобы убивать скрипт.

Будет ли это сделано как:

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

Ответы [ 4 ]

1 голос
/ 12 января 2010

Так я обычно делаю. У меня есть база данных в классе оболочки, поэтому $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);
0 голосов
/ 12 января 2010

Ваш код будет работать нормально:

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());
}

Надеюсь, это поможет!

0 голосов
/ 12 января 2010

Да, вы можете выдать исключение вместо того, чтобы убить скрипт.

0 голосов
/ 12 января 2010

Да.Вы можете использовать исключение почти везде, где вы обычно используете die/exit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...