我正在使用PDO连接到mysql数据库。如果我像这样设置错误属性,我很困惑我应该在哪里使用try catch块:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
现在我的连接信息(用户名,密码等)和上面的行在一个单独的文件中,我将包含在我的主文件中。这些(连接信息和上面的行)存储在try-catch块中。
在我的主文件中,我包含了这个文件。我的主文件中是否还需要try-catch块(围绕pdo相关的东西)? (它们是我创建和执行查询的地方)。
答案 0 :(得分:1)
与所有例外情况一样,您需要在不处理的任何时候处理它们,并且在处理它们的地方处理它们。对于可能抛出的每种方法,请问自己哪里可以正确处理?当可以抛出它们的PDO函数被调用时,但是在更高级别上捕获异常可能没有意义。 (例如,在创建新的PDO对象时处理PDOException没有意义,因为后面的代码将取决于具有有效的PDO对象;相反,它必须在可以处理的点处理尝试从异常中恢复或优雅地失败。)这是例外的原因:可能在较低级别检测到错误,其中可能没有足够的信息来处理错误。因此,代码会将异常抛出到可以处理错误的更高位置。
在设计良好的项目中,数据存储区访问被隔离到一个模块中,因此大多数其余代码不受数据存储区的确切性质的影响。在具有这种分离的体系结构(例如多层或MVC)中,数据存储区异常将在数据访问层中处理,但“处理”可能意味着抛出不同类型的异常。
考虑exception handling strategies:
是有帮助的or die
;无效的HTML不正常)。另请参阅:“Exception-handling antipatterns”。
如果您询问将错误模式设置为PDO::ERRMODE_EXCEPTION
是否会导致异常被捕获,则不会;事实上恰恰相反。只有catch块才能处理异常。