Exception handling PDO try catch和异常属性

Exception handling PDO try catch和异常属性,exception-handling,pdo,Exception Handling,Pdo,我正在使用PDO连接到mysql数据库。如果我像这样设置error属性,我很困惑应该在哪里使用try-catch块: $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常) 现在我有我的连接信息(用户名,通行证等)和上面的行在一个单独的文件中,我将包括在我的主文件中。这些(连接信息和上面的行)存储在try-catch块中 在我的主文件中,我包括这个文件。我是否也需要在我的主文件中尝试捕获块(围绕pdo相关的东西)?(它们是我创建和执行查询的地方

我正在使用PDO连接到mysql数据库。如果我像这样设置error属性,我很困惑应该在哪里使用try-catch块:
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常)

现在我有我的连接信息(用户名,通行证等)和上面的行在一个单独的文件中,我将包括在我的主文件中。这些(连接信息和上面的行)存储在try-catch块中


在我的主文件中,我包括这个文件。我是否也需要在我的主文件中尝试捕获块(围绕pdo相关的东西)?(它们是我创建和执行查询的地方)

与所有例外情况一样,您需要在未处理的任何时候处理它们,并且在处理它们有意义的地方处理它们。对于每一种可能抛出的方法,问问自己,在哪里可以合理地处理?在调用可能引发异常的PDO函数时,正确捕获异常可能没有意义,但是在更高的级别捕获异常。(例如,在创建新PDO对象时处理PDO异常是没有意义的,因为接下来的代码将取决于是否具有有效的PDO对象;相反,必须在可以尝试从异常中恢复或正常失败的点处处理它。)这就是出现异常的原因:错误可能在较低级别检测到,在较低级别,可能没有足够的信息来处理错误。因此,代码会将异常抛出到可以处理错误的更高位置

在一个设计良好的项目中,数据存储访问被隔离到一个模块中,因此大多数代码的其余部分不受数据存储的确切性质的影响。在具有这种分离的体系结构(如多层或MVC)中,数据存储异常将在数据访问层中处理,尽管“处理”可能意味着抛出不同类型的异常

这有助于思考:

  • 通过修复某些内容并再次尝试失败的操作重试
  • 通过重新启动操作重试
  • 继续进程并稍后重试该操作(不要只是继续并忽略异常)
  • 将异常(可能是同一个异常)抛出到更高级别
  • 通过向用户显示错误消息进行重试,让他们有机会修复某些问题,并(如果是)重试失败的操作
  • 向用户显示一条错误消息并结束(仅当输出HTML时;无效HTML不美观)
另见:“


如果您询问将错误模式设置为
PDO::ERRMODE_EXCEPTION
是否会导致捕获异常,则否;事实上,恰恰相反。只有catch块可以处理异常。

与所有异常一样,您需要在未处理异常的任何时候以及在处理异常有意义的地方处理异常。对于每一种可能抛出的方法,问问自己,在哪里可以合理地处理?在调用可能引发异常的PDO函数时,正确捕获异常可能没有意义,但是在更高的级别捕获异常。(例如,在创建新PDO对象时处理PDO异常是没有意义的,因为接下来的代码将取决于是否具有有效的PDO对象;相反,必须在可以尝试从异常中恢复或正常失败的点处处理它。)这就是出现异常的原因:错误可能在较低级别检测到,在较低级别,可能没有足够的信息来处理错误。因此,代码会将异常抛出到可以处理错误的更高位置

在一个设计良好的项目中,数据存储访问被隔离到一个模块中,因此大多数代码的其余部分不受数据存储的确切性质的影响。在具有这种分离的体系结构(如多层或MVC)中,数据存储异常将在数据访问层中处理,尽管“处理”可能意味着抛出不同类型的异常

这有助于思考:

  • 通过修复某些内容并再次尝试失败的操作重试
  • 通过重新启动操作重试
  • 继续进程并稍后重试该操作(不要只是继续并忽略异常)
  • 将异常(可能是同一个异常)抛出到更高级别
  • 通过向用户显示错误消息进行重试,让他们有机会修复某些问题,并(如果是)重试失败的操作
  • 向用户显示一条错误消息并结束(仅当输出HTML时;无效HTML不美观)
另见:“


如果您询问将错误模式设置为
PDO::ERRMODE_EXCEPTION
是否会导致捕获异常,则否;事实上,恰恰相反。只有catch块可以处理异常。

谢谢,我不知道try-catch块是否多余,因为我使用了PDO setAttribute函数。如果答案似乎不能解决您的问题,请编辑您的问题以澄清它。问答网站也是如此,而不是论坛。它继续运行。评论不是用来讨论的;它们用于澄清请求、简要注释等。谢谢,我不知道try-catch块是否多余,因为我使用了PDO setAttribute函数。如果答案似乎不能解决您的问题,请编辑您的问题以澄清它。问答网站也是如此,而不是论坛。它继续运行。评论不是用来讨论的;他们需要的东西,如澄清要求,简短的注解,等等。考虑挑选一个。一个好处是其他人可以使用,你会得到一个通知,有人在评论中提到你。这样做的一个好处是,其他人可以使用,您将收到一个通知,说明有人在评论中向您发送了地址。