5

我有一个 cli php 脚本,每当电子邮件到达特定地址时就会执行该脚本。

当新电子邮件到达时,将执行脚本的新实例,但由于它们读/写相同的数据库表,有时会写入错误的数据。

我的问题是,如果第一个脚本锁定它需要的所有表,并且运行脚本的第二个/第三个等实例,他们会等待表被第一个执行的脚本解锁吗?如果是这样,需要多久?

最后,我要做的是让脚本以串行方式一个接一个地进行读/写,以避免重复和错误。

4

2 回答 2

3

是的,它会等待。这是由数据库服务器完成的,客户端应用程序完全不知道它正在发生——据它所知,数据库执行查询的速度很慢。

于 2013-06-01T07:55:31.150 回答
0

PHP 脚本使用 mysql 库(mysql、mysqli、pdo)作为任何 mysql 客户端连接到 mysql 服务器并让它执行查询。mysql 服务器可以占用它想要的所有时间。

但是可以将 PHP 设置为限制总脚本执行时间(包括任何 mysql 查询)。如果超过此限制,PHP 将终止正在运行的进程。默认情况下,最大执行时间是 30 秒,如果我没记错的话,对于 cli 甚至是 300 秒。您可以在 php.ini 中进行设置。您甚至可以将 CLI 最大执行时间设置为无限制。

于 2013-06-01T08:15:57.027 回答