Yerine kalıp bir mysql sorgu sonunda () bir istisna kullanmak mümkün mü? Ben bir istisna atmak ve yerine komut öldürme bunu log istiyorum.
Sanki bitmiş olacaktır:
mysql_query(...) or throw new exception()??
Bu normalde bunu yoludur. Ben bir sarıcı sınıf benim veritabanı var, bu yüzden $this
sadece sargıya eder.
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;
}
Bu benim için güzel bir hata mesajı ile tüm kadar paketler, bu yüzden sorun sorgu görebilirsiniz. Elbette çok daha basit tutmak, ve yapabileceği:
mysql_query($sql) or throw new Exception("Problem with query: ".$sql);
Size verilen kod iyi çalışır:
mysql_query(...) or throw new Exception("Failed to run query");
Ama bu tamamen açık değildir Steno kullanıyor. Ben şahsen netlik için kısalık feda daha iyi olduğumuzu düşünüyorum:
if (false === mysql_query(...)) {
throw new Exception("Failed to run query.");
}
Bir yerde onları yakalamak eğer İstisnalar atma sadece yararlı olduğunu akılda tutmak, ve sizin durumunuzda muhtemelen özel bir durum kullanmak istiyorsanız:
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());
}
Umarım ki olur!