/**
* The required files
*/
require_once(HTML_DB_DATABASE_PATH.'/DatabaseCommon.php');
require_once(HTML_DB2_DATABASE_PATH.'/DB2Connection.php');
require_once(HTML_BASIC_UTIL_PATH.'/Message.php');
if (defined('HTML_LOG_UTIL_PATH')) {
require_once(HTML_LOG_UTIL_PATH.'/Log.php');
}
/**
* The interface towards the DB2 database
* The interface use an advanced sql caching methode
* <code>
* Usage:
* $myDb = new DB2Database();
* $myDb->open(); // Open a connection to the database
* :
* $myDb->doSomeThing() // Use the connection object to operate on table data
* :
* $myDb->close(); // Close the connection
* </code>
* @package db2
*/
class DB2Database extends DatabaseCommon {
/**
* @var int $affectedRows The Number of rows affected by the drop, insert, update etc.
*/
var $affectedRows = 0;
/**
* @var int $numRows Number of rows returned from a select,explain, etc. query
*/
var $numRows = 0;
/**
* @var int $row The row returned
*/
var $row = NULL;
/**
* @var String $sql The query
*/
var $sql = '';
/**
* Constructor
*/
function DB2Database() {
$this->DatabaseCommon(CLASS_NAME_DB2_CONNECTION);
}
/**
* Execute the specified query. SELECT, UPDATE, INSERT etc...
* Return false or a resource identifier (for SELECT,SHOW,EXPLAIN or DESCRIBE, ...)
* @param String $sql The sql query to execute
* @return boolean Returns TRUE (INSERT, UPDATE, DELETE, ...)
*/
function query($sql) {
$rc = false;
if ($this->connection!=NULL) {
$con = $this->connection->getConnection();
if ($con==NULL) {
$msg = $this->getClassName().'->query(), The connection is NULL. $this->connection->getConnection()';
if (defined('HTML_LOG_UTIL_PATH')) {
Log::fatal(__FILE__,__LINE__,$msg);
} else {
if (defined('DEBUG_LEVEL') && DEBUG_LEVEL & DEBUG_LEVEL_SHOW_SQL) {
Message::add($msg,__FILE__,__LINE__);
}
}
$this->connection->close();
return $rc;
}
$this->result = db2_exec($con, $sql, array('cursor' => DB2_SCROLLABLE));
$rc = $this->result!=FALSE;
if ($rc) {
/**
* SELECT, SHOW, DESCRIBE eller EXPLAIN returns a resource
* UPDATE, DELETE, DROP etc. return true on success
*/
if ($this->result!==true) {
$this->numRows = db2_num_rows($this->result);
} else {
//$this->affectedRows = mysql_affected_rows($con);
}
$msg = $this->getClassName()."->query(), OK, sql=".$sql." affectedRows=".$this->affectedRows;
if (defined('HTML_LOG_UTIL_PATH')) {
Log::query(__FILE__,__LINE__,$msg);
} else {
if (defined('DEBUG_LEVEL') && DEBUG_LEVEL & DEBUG_LEVEL_SHOW_SQL) {
Message::add($msg,__FILE__,__LINE__);
}
}
} else {
$msg = $this->getClassName().'->query(), FAILED, sql='.$sql;
if (defined('HTML_LOG_UTIL_PATH')) {
Log::query(__FILE__,__LINE__,$msg);
} else {
if (defined('DEBUG_LEVEL') && DEBUG_LEVEL & DEBUG_LEVEL_SHOW_SQL) {
Message::add($msg,__FILE__,__LINE__);
}
}
if (defined('DEBUG_LEVEL') && DEBUG_LEVEL & DEBUG_LEVEL_SHOW_SQL) {
Message::add($msg,__FILE__,__LINE__);
}
}
} else {
$msg = $this->getClassName().'->query(), FAILED, $this->connection is NULL';
if (defined('HTML_LOG_UTIL_PATH')) {
Log::fatal(__FILE__,__LINE__,$msg);
} else {
if (defined('DEBUG_LEVEL') && DEBUG_LEVEL & DEBUG_LEVEL_SHOW_SQL) {
Message::add($msg,__FILE__,__LINE__);
}
}
}
return $rc;
}
/**
* Returns the number of fields in the result
* @return int The number of fields in the result
*/
function getNumFields() {
return db2_num_fields($this->result);
}
/**
* Get the name of the specified field in a result
* @param int $offset The field offset to fetch
* @return String Returns the name of the specified field index
*/
function getFieldName($offset) {
$rc = db2_field_name($this->result,$offset);
return $rc===false?'':$rc;
}
/**
* Get the type of the specified field in a result
* @param int $offset The field offset to fetch
* @return String Returns the field type and will be one of
* "int", "real", "string", "blob", ...
*/
function getFieldType($offset) {
$rc = db2_field_type($this->result,$offset);
return $rc===false?'':$rc;
}
/**
* Get the type of the specified field in a result
* @todo NOT SUPPORTED
* @param int $offset The field offset to fetch
* @return String Returns the field flags
*/
function getFieldFlags($offset) {
$rc = ''; // NO SUPPORT db2_field_flags($this->result,$offset);
// @todo see ../test/HelloWorld.php
return $rc===false?'':$rc;
}
/**
* Get the type of the specified field in a result
* @todo NOT SUPPORTED
* @param int $offset The field offset to fetch
* @return String Returns the field table
*/
function getFieldTable($offset) {
$rc = ''; // NO SUPPORT db2_field_table($this->result,$offset);
// @todo see ../test/HelloWorld.php
return $rc===false?'':$rc;
}
/**
* Get the length of the specified field
* @param int $offset The field offset to fetch
* @return int Returns the length of the specified field
*/
function getFieldLen($offset) {
$rc = db2_field_display_size($this->result,$offset);
return $rc===false?'':$rc;
}
/**
* Fetch the result of the query
* @return object Returns the contents of the resultset, returns FALSE when all have been returned
*/
function fetchAssoc() {
return db2_fetch_assoc($this->result);
}
/**
* Get the affected rows
* @return int The number of rows affected by the query
*/
function getAffectedRows() {
return $this->affectedRows;
}
/**
* Get the number of rows
* @return int The number of rows returned by the query
*/
function getNumRows() {
return $this->numRows;
}
}
?>
HTML source code
Den fulde HTML kildekode for DB2Database klassen
<?
ERROR, Db2database->getHtml() *** ABSTRACT *** You MUST implement this<br />
?>
Class methods
Her er 'klasse metoderne' for DB2Database klassen: