/**
* The required files
*/
require_once(HTML_DB_DATABASE_PATH.'/DatabaseCommon.php');
if (defined('HTML_LOG_UTIL_PATH')) {
require_once(HTML_LOG_UTIL_PATH.'/Log.php');
}
/**
* The interface towards the mysql database
* The interface use an advanced sql caching methode
* <code>
* Usage:
* $myDb = new Database();
* $myDb->open(); // Open a connection to the database
* :
* $myDb->doSomeThing() // Use the connection object to operate on table data
* :
* $myDb->freeResult(); // Free the resources
* $myDb->close(); // Close the connection
* </code>
* @package db
*/
class Database 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 = '';
/**
* @var String $error The error message for the query
*/
var $error = '';
/**
* Constructor
*/
function Database() {
$this->DatabaseCommon(CLASS_NAME_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 = mysql_query($sql, $con);
$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 = mysql_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 {
$this->error = $this->getError();
$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('SQL:<pre>'.$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;
}
/**
* Return the ID generated for the INSERT statement for an AUTO_INCREMENT type
* @return int Return the ID generated by the INSERT query
*/
function getInsertId() {
$con = $this->connection->getConnection();
if ($con==NULL) {
$msg = $this->getClassName().'->getInsertId(), 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 -1;
}
return mysql_insert_id($con);
}
/**
* 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;
}
/**
* Fetch one row of data from the result associated with the specified result identifier
* @param object $result The result identifier or NULL
* @return object Returns an array that corresponds to the fetched row, or FALSE if there are no more rows
*/
function fetchRow($result='') {
$this->row = mysql_fetch_row($result!=''?$result:$this->result);
return $this->row;
}
/**
* Fetch the result of the query
* @param object $result_type The optional argument result_type is a constant and
* can take the following values: MYSQL_ASSOC, MYSQL_NUM, and MYSQL_BOTH.
* @return object Returns the contents of the resultset, returns FALSE when all have been returned
*/
function fetchObject($result_type=MYSQL_ASSOC) {
return mysql_fetch_object($this->result, $result_type);
}
/**
* Fetch the result of the query
* @param int $result_type The optional argument result_type is a constant and
* can take the following values: MYSQL_ASSOC, MYSQL_NUM, and MYSQL_BOTH.
* @return array Returns the contents of the resultset, returns FALSE when all have been returned
*/
function fetchArray($result_type=MYSQL_BOTH) {
return mysql_fetch_array($this->result, $result_type);
}
/**
* Fetch the result of the query
* @return object Returns the contents of the resultset, returns FALSE when all have been returned
*/
function fetchAssoc() {
return mysql_fetch_assoc($this->result);
}
/**
* Returns the number of fields in the result
* @return int The number of fields in the result
*/
function getNumFields() {
return mysql_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 = mysql_field_name($this->result,$offset);
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 = mysql_field_len($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 = mysql_field_type($this->result,$offset);
return $rc===false?'':$rc;
}
/**
* Get the flags associated with the specified field in a result
* The flags are reported as an array of words per flag separated by a single space,
* @param int $offset The field offset to fetch
* @return array Returns an array of the field flags or FALSE on failure
*/
function getFieldFlags($offset) {
$rc = mysql_field_flags($this->result,$offset);
return $rc===false?'':explode(' ',$rc);
}
/**
* Get name of the table the specified field is in
* @param String $offset The field offset to fetch
* @return String Returns the name of the table that the specifed field is in
*/
function getFieldTable($offset) {
$rc = mysql_field_table($this->result,$offset);
return $rc===false?'':$rc;
}
}
?>
HTML source code
Den fulde HTML kildekode for Database klassen
<?
ERROR, Database->getHtml() *** ABSTRACT *** You MUST implement this<br />