跳过循环中的错误?(PHP)


Skipping errors in a loop? (PHP)

我有一个循环,其中代码循环,并在每个循环它连接到不同的服务器,然后使MySQL查询。然而,有时其中一个循环/查询无法到达终点,所有代码都中断了。是否有一种方法,如果循环给出错误,然后跳过进程/移动到下一个循环?

如上所述,正确的方法是在try...catch块内完成此操作。

要了解更多关于这些,你可以在这里阅读。

谢谢@Paul。

在该循环中,检查连接,如果连接成功,则执行逻辑。因此,如果没有建立连接,逻辑部分将被跳过。

使用"continue"来跳转到循环中的下一项:

继续

这完全取决于你是否使用php内置的mysqlmysqli或一些第三方库。但作为一般规则,我建议使用以下逻辑:

  1. 循环开始
  2. 检查连接是否正常
  3. 检查可能丢失的表使用SHOW TABLES查询,或者如果你有权限检查mysql数据库持有模式信息。您也可以在选择数据库模式之前使用SHOW DATABASES查看模式是否存在。
  4. 如果table存在,对它执行逻辑并断开连接-否则继续移动到循环的下一个迭代
  5. 循环结束

根据您在问题表上所做的工作,您还可以使用@前缀(如@mysql_query)来抑制查询中的任何错误,然后检查受影响的行数。如果你做一个select,你可以检查你的结果集,看看你是否得到了什么。我不喜欢使用@,但是应该注意的是,从一个空的现有表中进行选择,类似的情况可能会导致奇怪的行为,这取决于您的代码。Try/Catch是处理错误控制流的更好方法。但实际上抛出异常是一个相当缓慢的过程,因为所有的工作都围绕着连接到各地的数据库,如果这个循环可能抛出很多异常,那么进一步降低速度可能不是一个好主意。此外,当使用它来跳过循环中的一个步骤时,有些人可能很难遵循逻辑。因此,像@这样的东西在这里是可以接受的;)