2012-05-04 47 views
1

我有一个网站抓取脚本,存储数据到少数MySQL表中。主表中的记录是从其他记录引用的。脚本需要大约5个小时才能执行,但大约70分钟后它会停止工作(set_time_limit()设置为c)。我试图从浏览器和cron运行它,结果是一样的。任务划分为一个PHP脚本

由于脚本在随机时间停止,因此可能导致数据库不一致。主表记录可以被存储,但是不存在从属表使用来自主表的mysql_insert_id()记录。

当运行脚本时,有没有比删除主表中最后一条记录和从其他表中删除最后一条记录更好的方法?

回答

2

您可以将所有查询包装在一个事务中的给定记录中,并在最后提交。这样,如果脚本中途通过一组查询,这些更改将被回滚并且数据将保持一致。

+0

谢谢。这种方法是最好的。 – user965748

1

第一件事:你检查了mysql连接的TTL吗?也许这就是导致问题的原因?

如果此问题不断弹出,您可能需要考虑使用PDO创建数据库适配器对象,您可以简单地使用:$db->beginTransaction();启动脚本,并通过提交$db->commit();来完成更改(如果一切顺利)。

这种方法有很多优点,其中主要是$db->rollBack();万一出现了问题。另一个好处是,当MySQL发生错误时,PDO类将抛出一个PDOException对象,因此您可以执行回滚,以确保没有损坏的数据写入您的数据库并以某种方式退出,类似于此die($e->getMessage());看看究竟出了什么问题。

查看PDO man-page的信息

+0

你的意思是mysql.connect_timeout?这是设置为60.交易看起来像你最好的路要走。 – user965748

相关问题