Abstraction Layers
|
|
|
|
<?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
|
|
|
|