/**
* The required files
*/
require_once(HTML_DB_DATABASE_PATH.'/Database.php');
require_once(HTML_DTO_UTIL_PATH.'/DataReader.php');
require_once(HTML_BASIC_UTIL_PATH.'/Message.php');
if (defined('HTML_LOG_UTIL_PATH')) {
require_once(HTML_LOG_UTIL_PATH.'/Log.php');
}
/**
* The Command towards the mysql database
* The resultset is returned via the new DataReader object
* <code>
* Usage:
* $database = new Database(); // or DB2Database() if DB2
* $sql = 'SELECT * FROM basket WHERE ID=1';
* $command = new Command();
* $datareader = $command->newDataReader($sql, $database);
* Or
* $datareader = Command::newDataReader($sql, $database);
*
* And print any data out
* print $datareader->getNumRows();;
* </code>
* @package db
*/
class Command {
/**
* Constructor
*/
function Command() {
}
/**
* Creates a new DataReader object.
* Open a connection to the database and perform the query.
* If any data is found, the DataReader object is populated.
* return the DataReader object
* Note: FieldFlags, No support in DB2, use db2_foreign_keys and db2_primary_keys() etc.
* <code>
* Usage:
* $database = new Database(); // or DB2Database() if DB2
* $command = new Command();
* $datareader = $command->newDataReader($sql, $database);
* Or
* $datareader = Command::newDataReader($sql, $database);
*
* And print any data out
* print $datareader->getNumRows();;
* </code>
* @param String $sql The sql to use
* @param Database $database The database object to use
* @return DataReader The Data Reader object
*/
function newDataReader($sql, $database='') {
$datareader = new DataReader();
$db = $database;
if ($db == '') {
$db = new Database();
}
if (is_a($db,CLASS_NAME_DATABASE) || is_a($db, CLASS_NAME_DB2_DATABASE)) {
// Ok, Sanity check
} else {
$msg = "Command->newDataReader() not a valid database, expected: Database() or DB2Database(), found <br />\r\ndatabase=$database";
if (defined('HTML_LOG_UTIL_PATH')) {
Log::fatal(__FILE__,__LINE__,$msg);
}
die('File: '.__FILE__."<br />\r\nLine: ".__LINE__."<br />\r\n".$msg);
}
$db->open();
$rc = $db->query($sql);
if ($rc) {
$datareader->setRc($rc);
$datareader->setNumRows($db->getNumRows());
$numFields = $db->getNumFields();
$datareader->setNumFields($numFields);
for ($i=0; $i<$numFields; $i++) {
$name = $db->getFieldName($i);
$datareader->addFieldName ($name,$db->getFieldName($i));
$datareader->addFieldLen ($name,$db->getFieldLen($i));
$datareader->addFieldType ($name,$db->getFieldType($i));
$datareader->addFieldFlags($name,$db->getFieldFlags($i));
$datareader->addFieldTable($name,$db->getFieldTable($i));
}
$no = 0;
while ($row = $db->fetchAssoc()) {
$datareader->add($no++,$row);
}
} else {
$msg = "Command->newDataReader() nothing returned from query<br />\r\nsql=$sql<br />\r\n";
if (defined('HTML_LOG_UTIL_PATH')) {
Log::error(__FILE__,__LINE__,$msg);
} else {
// do nothing
}
if (defined('DEBUG_LEVEL') && DEBUG_LEVEL & DEBUG_LEVEL_SHOW_SQL) {
Message::add($msg,__FILE__,__LINE__);
}
$datareader->setMsg($msg);
}
$db->freeResult();
$db->close();
return $datareader;
}
}
?>