diff options
author | Georg Richter <georg@php.net> | 2002-07-21 22:19:51 +0000 |
---|---|---|
committer | Georg Richter <georg@php.net> | 2002-07-21 22:19:51 +0000 |
commit | 27c282d34a2d09d31d3804b849444904ca498d0e (patch) | |
tree | d820f1e871357271f60fc8990ac327f7cdd6b1e7 /ext/mysql/php_mysql.c | |
parent | 4d99f3e4e37b5daa88bb127d6f0de8ea7ea86ab3 (diff) | |
download | php-git-27c282d34a2d09d31d3804b849444904ca498d0e.tar.gz |
Automatic rollback for non committed transactions
Diffstat (limited to 'ext/mysql/php_mysql.c')
-rw-r--r-- | ext/mysql/php_mysql.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index eb3a96ebdd..039c87f9c9 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -215,6 +215,26 @@ ZEND_GET_MODULE(mysql) void timeout(int sig); #define CHECK_LINK(link) { if (link==-1) { php_error(E_WARNING, "MySQL: A link to the server could not be established"); RETURN_FALSE; } } +/* {{{ _rollback_mysql_transactions + */ +static int _rollback_mysql_transactions(zend_rsrc_list_entry *rsrc TSRMLS_DC) +{ + php_mysql_conn *link; + char query[128]; + + /* check if its a persistent link */ + if (Z_TYPE_P(rsrc) != le_plink) + return 0; + + link = (php_mysql_conn *) rsrc->ptr; + + /* rollback possible transactions */ + strcpy (query, "ROLLBACK"); + mysql_real_query(&link->conn, query, strlen(query)); + + return 0; +} +/* }}} */ /* {{{ _free_mysql_result * This wrapper is required since mysql_free_result() returns an integer, and @@ -385,6 +405,8 @@ PHP_RINIT_FUNCTION(mysql) */ PHP_RSHUTDOWN_FUNCTION(mysql) { + zend_hash_apply(&EG(persistent_list), (apply_func_t) _rollback_mysql_transactions TSRMLS_CC); + if (MySG(connect_error)!=NULL) { efree(MySG(connect_error)); } |