Zend - The PHP Company




Abstraction Layers

Add Code


Modified Simple Database Abstraction Class to Handle MySQL INNDO Transactional Commits and Rollbacks  

Type: class
Added by: devashishb
Entered: 03/01/2006
Last modified: 02/12/2005
Rating: - (fewer than 3 votes)
Views: 4965
Slight changes to Simple Data Abstraction Class by ICEMAC. Changes to handle Commits / Rollbacks in MYSQL transactional tables.


<?php
class DataLayerAbstract {
    public 
$connection;
    public 
$resultSet;
    public 
$autoCommit 0;
    public 
$rowData;
    public 
$nextRowNumber 0;
    public 
$rowCount 0;
    public function 
__construct() {
        die(
"DataLayerAbstract: Do not create instances of DataLayerAbstract! Use a subclass instead.");
    }
    public public function 
Open($host$user$pass$db ""$autocommit 0) {
    }
    public function 
Close() {
    }
    public function 
SelectDB($dbname) {
    }
    public function 
Query($querystr) {
    }
    public function 
SeekRow($row 0) {
    }
    public function 
ReadRow() {
    }
    public function 
Begin() {
    }
    public function 
Commit() {
    }
    public function 
Rollback() {
    }
    public function 
SetAutoCommit($autoCommit) {
        
$this->autoCommit $autoCommit;
    }
    public function 
_ident() {
        return 
"DataLayerAbstract/1.2";
    }
}

class 
DataLayerMySQL extends DataLayerAbstract {
    public function 
__construct($host$user$pass$db null) {
        
$this->Open($host$user$pass);
        if (
$db != null) {
            
$this->SelectDB($db);
        }
    }
    public function 
Open($host$user$pass$autocommit 0) {
        
$this->connection mysql_connect($host$user$pass);
    }
    public function 
Close() {
        @ 
mysql_free_result($this->dbQResult);
        return 
mysql_close($this->connection);
    }
    public function 
SelectDB($dbname) {
        return (
mysql_select_db($dbname$this->connection));
    }
    public function 
Query($querystr) {
        
$result mysql_query($querystr$this->connection);
        if (!
$result) {
            return 
0;
        } else {
            if (isset(
$this->dbQResult))
                
mysql_free_result($this->dbQResult);
            
$this->rowData = array();
            
$this->resultSet $result;
            
$this->rowCount mysql_num_rows($this->resultSet);
            if (!
$this->rowCount) {
                
$this->rowCount 0;
            }
            return 
1;
        }
    }
    public function 
SeekRow($row 0) {
        if ((!
mysql_data_seek($this->resultSet$row)) or ($row $this->rowCount 1)) {
            
printf("SeekRow: Cannot seek to row %dn"$row);
            return 
0;
        } else {
            return 
1;
        }
    }
    public function 
ReadRow() {
        if (
$this->rowData mysql_fetch_array($this->resultSet)) {
            
$this->nextRowNumber++;
            return 
1;
        } else {
            return 
0;
        }
    }
    public function 
Begin() {
        
mysql_query("SET AUTOCOMMIT=0");
        
mysql_query("BEGIN"); // For MySQL 3.x 
        // mysql_query("START TRANSACTION"); // For MySQL 4 and above
    
}
    public function 
Commit() {
        
mysql_query("COMMIT");
    }
    function 
Rollback() {
        
mysql_query("ROLLBACK");
    }
    public function 
_ident() {
        return 
"DataLayerMySQL/1.2";
    }
}

?>


Usage Example


/** 
create table chartaccounts
(achead integer NOT NULL PRIMARY KEY AUTO_INCREMENT, 
description varchar(90), 
opdr decimal(20,4) ,   
opcr decimal(20,4),
dr decimal(20,4),   
cr decimal(20,4),
budgdr decimal(20,4),         
budgcr decimal(20,4),
groupaccount integer,       
subyn char(1),                
subgrp integer,       
conum integer,
yrno integer,
accounttype varchar(3)         
) TYPE=INNODB;
*/
error_reporting(E_ERROR | E_PARSE);
ini_set("date.timezone", "America/New_York");

$rollback = false;
$sql = new DataLayerMySQL("localhost", "root", "", "value");
$sql->Begin();
$sql->Query("delete from chartaccounts where achead = 2");
echo "Row Deleted <br>";
$sql->Query("SELECT achead, description FROM chartaccounts where achead between 1 and 10");
$rollback = $sql->connection;
echo "Total Rows = ". $sql->rowCount . "<br>";
while ($sql->ReadRow()) {
    $strResult = $sql->rowData["achead"].", ";
    $strResult .= $sql->rowData["description"]."<br>";
    echo $strResult;
}
$sql->Rollback();
$sql->Query("SELECT achead, description FROM chartaccounts where achead between 1 and 10");
$rollback = $sql->connection;
echo "Total Rows = ". $sql->rowCount . "<br>";
while ($sql->ReadRow()) {
    $strResult = $sql->rowData["achead"].", ";
    $strResult .= $sql->rowData["description"]."<br>";
    echo $strResult;
}
if ($rollback) $sql->Rollback(); 


Rate This Script





Search



This Category All Categories