Modificato il comportamento di transazione predefinito PHP-Interbase
Domanda
Ho degli script PHP CLI che corrono per un lungo periodo (24 ore più) e sebbene facciano regolarmente "commit di cui ho avuto alcuni problemi con le transazioni orfane - possibilmente causate da script che si bloccano.
La mia soluzione è stata quella di creare la transazione come segue - è stato un anno fa che ho studiato questo e non riesci a ricordare le precise ragioni per queste impostazioni ma sembrava risolvere alcuni problemi con il database.
$ dbh= ibase_connect ($ dbhost, $ dbuser, $ dbpass); $ TRANS= IBASE_TRANS (IBASE_WRITE + IBASE_COMMITED + IBASE_REC_VERSION + IBASE_WAIT, $ DBH);
Ora è aggiornato a PHP 5.3.5 e ha scoperto che la linea IBASE_TRANS causa un errore di segmentazione. Nella pagina PHP IBASE_TRANS c'è una nota:
"Il comportamento di questa funzione è stato modificato in PHP 5.0.0. La prima chiamata a ibase_trans () non restituirà la transazione predefinita di una connessione."
Quindi la mia domanda è se posso impostare gli argomenti di transazione per la transazione predefinita ... Domanda secondaria, sia che ti manca interamente il punto nel cercare di farlo comunque!
Grazie
Soluzione
Non dovresti lavorare con la transazione predefinita.
Definisci la tua transazione come figli:
$T = ibase_trans($params, $database);
.
Dopo aver eseguito la query:
ibase_query($T, $SQL, $Params)
.
o puoi usare ibase_prepare e ibase_execute.
Dopo di esso, chiama
ibase_commit_ret($T); // this mentain transaction active
.
o
ibase_commit($T) // this commit work close transaction
.