このチュートリアル をご覧ください。 PDOとの取引について。
基本的に、実行時間の長いコードを次のようにラップします:
$dbh->beginTransaction();
...
$dbh->commit();
そして、このPDOドキュメントページによると :
「スクリプトが終了したとき、または接続が閉じられようとしているときに、未処理のトランザクションがある場合、PDOは自動的にスクリプトをロールバックします。」
そのため、スクリプトがタイムアウトしたときに保留されていたトランザクションは失われます。
しかし、実際には、これを再設計して、スクリプトが生き続けることに依存しないようにする必要があります。