If you are using persistent connections (odbc_pconnect rather than odbc_connect) the next script that reuses the connection will inherit your changes to autocommit.
odbc_autocommit
(PHP 4, PHP 5)
odbc_autocommit — Active le mode d'autovalidation
Description
Sans le paramètre onoff, odbc_autocommit() retourne le statut d'autovalidation
Par défaut, l'autovalidation est activée. Désactiver l'autovalidation est équivalent à démarrer une transaction.
Liste de paramètres
- connection_id
-
L'identifiant de connexion ODBC, voir la documentation de la fonction odbc_connect() pour plus de détails.
- OnOff
-
Si OnOff vaut TRUE, l'autovalidation est activée. S'il est FALSE, l'autovalidation est désactivée.
Valeurs de retour
Sans le paramètre OnOff, odbc_autocommit() retourne le statut d'autovalidation de la connexion connection_id. Une valeur différente de 0 si le mode est activé, 0 s'il ne l'est pas, ou FALSE si une erreur survient.
Si OnOff est défini, cette fonction retourne TRUE en cas de succès,et FALSE si une erreur survient.
Hi (i'm belgian then sorry for my english).
I think you can do more simple to check the errors :
$conn = odbc_connect($odbc,$user,$password)
or die($error);
odbc_autocommit($conn, FALSE);
odbc_exec($conn, $query1);
odbc_exec($conn, $query2);
if (!odbc_error())
odbc_commit($conn);
else
odbc_rollback($conn);
odbc_close($conn);
I'm not sure it's better to use odbc_error() than
odbc_error($conn). It seems to be the same result.
using autocommit functionality to rollback transactions in a "workspace"
<?php
$conn = odbc_connection("$DSN","USER","PASS");
//turns off autocommit
odbc_autocommit($conn,FALSE);
$query1 = "some SQL";
$query2 = "some more SQL";
$ErrorCount = 0;
//if odbc_exec fails it will increment the $ErrorCount
$result = odbc_exec($conn,$query1) or $ErrorCount++;
$result2 = odbc_exec($conn,$query2) or $ErrorCount++;
//checking for errors, commit if none, rollback else
if ($Errorcount == 0){
odbc_commit($conn);
echo "transaction successful";
}
else{
odbc_rollback($conn);
echo "there were errors processing the transaction.
No changes were made to the database";
}
odbc_close($conn);
?>
Cheers,
Ron
It seems that example made by andrea dot galli at acotel dot com works exactly the contrary.
It sets autocommit OFF and NOT ON like it's written inside note!
If a transaction is started (autocommit disabled) while there is an active result id on the connection, odbc_autocommit will post a warning (Cannot set autocommit). Use odbc_free_result to clear the result id's or start the transaction before you execute the SQL.
Example: set autocommit on
<?php
$Link_ID = odbc_connect("DSN", "user", "pass");
$Return = odbc_autocommit($Link_ID, FALSE);
?>
When used in a odbc_fetch loop your selected resultset is lost and loop ends.
