尝试用php pdo中的catch,以正确的方式进行
我在postgres中使用php pdo。我使用的是核心php,没有mvc,没有类和对象。我对发展还不熟悉,所以心里有些疑惑:-尝试用php pdo中的catch,以正确的方式进行,php,exception,pdo,Php,Exception,Pdo,我在postgres中使用php pdo。我使用的是核心php,没有mvc,没有类和对象。我对发展还不熟悉,所以心里有些疑惑:- 我应该在每次执行查询时使用try-catch吗。 如果我使用try-catch,那么我是否应该在异常时退出正在运行的脚本 有没有一种方法可以对所有查询使用一个try-catch,我的意思是创建一个用于执行查询的公共函数。 以及如何在ajax上处理异常。 请有人澄清我对此的疑虑 问题太多,太笼统了。但在大多数情况下: 不可能 这取决于你,你的应用程序的逻辑和具体情况
- 我应该在每次执行查询时使用try-catch吗。
- 如果我使用try-catch,那么我是否应该在异常时退出正在运行的脚本
- 有没有一种方法可以对所有查询使用一个try-catch,我的意思是创建一个用于执行查询的公共函数。
- 以及如何在ajax上处理异常。
请有人澄清我对此的疑虑 问题太多,太笼统了。但在大多数情况下:
但是对于一个常规的查询,仅仅处理一个任意的错误——就像@skyboyer所说的那样——是不可能的。异常应该由站点范围的处理程序处理
- 有一个全局try-catch可以充当站点范围的异常处理程序,包装整个代码李>
- 至于运行所有查询的函数,这本身就是一个绝妙的想法,但它与错误处理无关。这仅仅是因为数据库错误与站点上的任何其他错误没有区别,因此应以完全相同的方式处理。因此,为查询函数编写专用的try-catch是没有意义的。让它抛出一个异常,然后将该异常作为站点上的任何其他错误处理
我写了一篇文章,试图解释所有这些问题,你可能会觉得有趣 好的,因为我在生产服务器上,所以错误报告已关闭。我应该使用$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);。我不熟悉PDO特定的标志。一般来说,对于生产,每个错误/异常都应该写入日志(并且不应该向浏览器显示任何错误/异常)。所以,是的,错误报告是关闭的,日志错误是打开的,PDO需要记录错误的所有东西也是打开的;使用try..catch绝对有意义,但不是每个查询;不幸的是,我不知道如何区分连接到DB时发生的授权错误和验证错误,因此创建一个包装器来记录每个异常可能是有意义的(但我希望应该有更优雅的方式)@KuldeepThakur对整个代码进行全局尝试捕获是完全可以的。或者您可以创建一个基本相同的异常处理程序。有关示例代码,请参阅我的文章@YourCommonSense,我可以部分不同意吗?我相信更典型的例子是“有些东西坏了,但我们仍在前进”。假设
news
表已损坏/锁定/etc,但我们仍然可以使用传入的电子邮件呈现页面的其余部分。但要在最顶层处理db异常,我们应该允许它传播,并在传播过程中停止一切。