Zachycení výjimky – PDOException #1044

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
James
Člen | 54
+
0
-

Ahoj,

pomocí

<?php
$connection = new Nette\Database\Connection($dsn, $user, $pass);
?>

vytvářím připojení k předem neznámé databází, takže přihlašovací údaje zadává uživatel a při pokusu o připojení k databázi se špatnými údaji nastane chyba PDOException #1044. Já bych potřeboval nějak zachytit tuhle výjimku a poté na ní reagovat. Akorát nevím jak správně výjimku zachytit.

Zkoušel jsem zkušebně použít

<?php
try {
	$connection = new Nette\Database\Connection($dsn, $user, $pass);
} catch (PDOException $e)
	var_dump($e->getCode());
}
?>

ale výjimku mi to nezachytilo. Nevíte si s tímto problémem někdo rady. Díky

jiri.pudil
Nette Blogger | 1032
+
0
-

Takhle je to správně. Chybí ti složená závorka otevírající catch blok, ale to je asi jen chyba v přepisu, že?

Problém může být ve jmenných prostorech. Jestli je tvůj kód v nějakém namespacu, musíš buďto výjimku naimportovat (use PDOException;), anebo v catchi uvést fully qualified name (\PDOException).

Majkl578
Moderator | 1364
+
0
-

Konkrétně tedy:

try {
	$connection = new Nette\Database\Connection($dsn, $user, $pass);
} catch (\PDOException $e)
	if ($e->getCode() === 1044) {
		// zpracování chyby #1044
	} else {
		throw $e; // re-throw
	}
}