cakephp2-php8/cake/libs/model/dbo/dbo_odbc.php
phpnut 4a8c03ef1c Merging fixes into the trunk.
Revision: [2618]
Adding fix for Ticket #609

Revision: [2617]
Added fix for Ticket #684

Revision: [2616]
Adding patch from Ticket #649

Revision: [2615]
Adding fix for Ticket #608

Revision: [2614]
Additional fix for Ticket #584

Revision: [2613]
Adding fix for Ticket #584

Revision: [2612]
Added fix for undefined index notices

Revision: [2609]
Adding fix for Ticket #658

Revision: [2608]
Adding fix for Ticket #635, and code formatting fixes in FormHelper

Revision: [2607]
Adding fix for Ticket #636

Revision: [2606]
Adding fix to allow associations to be defined through non-associative arrays

Revision: [2605]
Adding fix for Ticket #672

Revision: [2604]
Adding fix for Ticket #708

Revision: [2603]
Adding fix for Ticket #687

Revision: [2602]
Refactoring database drivers, and adding fix for Ticket #398

Revision: [2601]
Merging change from model_php5.php

Revision: [2600]
Adding ODBC driver

Revision: [2599]
Adding fix for Ticket #702

Revision: [2598]
Adding fix for Ticket #699

Revision: [2597]
Fixing an issue in Model::set(), and moving limit() to DboSource

Revision: [2595]
Fixing unit test download URL in Bake

Revision: [2594]
Adding fix for Ticket #698

Revision: [2593]
Adding fox for Ticket #231

Revision: [2592]
Adding fix for Ticket #630, and updating MS SQL driver docstring

Revision: [2577]
Adding $alias property to enable future Oracle support

Revision: [2568]
Merging changes to bake from old sandboxes

git-svn-id: https://svn.cakephp.org/repo/trunk/cake/1.x.x.x@2620 3807eeeb-6ff5-0310-8944-8be069107fe0
2006-04-27 10:04:08 +00:00

503 lines
No EOL
12 KiB
PHP

<?php
/* SVN FILE: $Id$ */
/**
* ODBC for DBO
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.cake.libs.model.dbo
* @since CakePHP v 0.10.5.1790
* @version $Revision$
* @modifiedby $LastChangedBy$
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
* Include DBO.
*/
uses('model'.DS.'datasources'.DS.'dbo_source');
classÊDboOdbcÊextendsÊDboSource
{
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@varÊunknown_type
Ê*/
ÊÊÊÊvarÊ$descriptionÊ=Ê"ODBCÊDBOÊDriver";
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@varÊunknown_type
Ê*/
ÊÊÊÊvarÊ$startQuoteÊ=Ê"`";
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@varÊunknown_type
Ê*/
ÊÊÊÊvarÊ$endQuoteÊ=Ê"`";
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@varÊunknown_type
Ê*/
ÊÊÊÊvarÊ$_baseConfigÊ=Êarray('persistent'Ê=>Êtrue,
ÊÊÊÊ 'login'ÊÊÊÊÊÊ=>Ê'root',
ÊÊ ÊÊ'password'ÊÊÊÊ=>Ê'',
ÊÊÊÊ 'database'ÊÊÊÊ=>Ê'cake');
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@varÊunknown_type
Ê*/
ÊÊÊÊ
ÊÊÊÊvarÊ$columnsÊ=Êarray();
ÊÊÊÊ
//ÊÊÊÊvarÊ$columnsÊ=Êarray('primary_key'Ê=>Êarray('name'Ê=>Ê'int(11)ÊDEFAULTÊNULLÊauto_increment'),
//ÊÊÊÊ'string'ÊÊÊÊÊÊ=>Êarray('name'Ê=>Ê'varchar',Ê'limit'Ê=>Ê'255'),
//ÊÊÊÊ'text'ÊÊÊÊÊÊÊÊ=>Êarray('name'Ê=>Ê'text'),
//ÊÊÊÊ'integer'ÊÊÊÊÊ=>Êarray('name'Ê=>Ê'int',Ê'limit'Ê=>Ê'11'),
//ÊÊÊÊ'float'ÊÊÊÊÊÊÊ=>Êarray('name'Ê=>Ê'float'),
//ÊÊÊÊ'datetime'ÊÊÊÊ=>Êarray('name'Ê=>Ê'datetime',Ê'format'Ê=>Ê'Y-m-dÊh:i:s',Ê'formatter'Ê=>Ê'date'),
//ÊÊÊÊ'timestamp'ÊÊÊ=>Êarray('name'Ê=>Ê'datetime',Ê'format'Ê=>Ê'Y-m-dÊh:i:s',Ê'formatter'Ê=>Ê'date'),
//ÊÊÊÊ'time'ÊÊÊÊÊÊÊÊ=>Êarray('name'Ê=>Ê'time',Ê'format'Ê=>Ê'h:i:s',Ê'formatter'Ê=>Ê'date'),
//ÊÊÊÊ'date'ÊÊÊÊÊÊÊÊ=>Êarray('name'Ê=>Ê'date',Ê'format'Ê=>Ê'Y-m-d',Ê'formatter'Ê=>Ê'date'),
//ÊÊÊÊ'binary'ÊÊÊÊÊÊ=>Êarray('name'Ê=>Ê'blob'),
//ÊÊÊÊ'boolean'ÊÊÊÊÊ=>Êarray('name'Ê=>Ê'tinyint',Ê'limit'Ê=>Ê'1'));
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@paramÊunknown_typeÊ$config
Ê*Ê@returnÊunknown
Ê*/
ÊÊÊÊfunctionÊ__constructÊ($config)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊreturn parent::__construct($config);
ÊÊÊÊ}
/**
Ê*ÊConnectsÊtoÊtheÊdatabaseÊusingÊoptionsÊinÊtheÊgivenÊconfigurationÊarray.
Ê*
Ê*Ê@returnÊbooleanÊTrueÊifÊtheÊdatabaseÊcouldÊbeÊconnected,ÊelseÊfalse
Ê*/
ÊÊÊÊfunctionÊconnectÊ()
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊ$configÊ=Ê$this->config;
ÊÊÊÊÊÊÊÊ$connectÊ=Ê$config['connect'];
ÊÊÊÊÊÊÊÊ$this->connectedÊ=Êfalse;
ÊÊÊÊÊÊÊÊ$this->connectionÊ=Ê$connect($config['database'],Ê$config['login'],Ê$config['password']);
ÊÊÊÊÊÊÊÊifÊ($this->connection)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$this->connectedÊ=Êtrue;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ//die('CouldÊnotÊconnectÊtoÊDB.');
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊ}
/**
Ê*ÊDisconnectsÊfromÊdatabase.
Ê*
Ê*Ê@returnÊbooleanÊTrueÊifÊtheÊdatabaseÊcouldÊbeÊdisconnected,ÊelseÊfalse
Ê*/
ÊÊÊÊfunctionÊdisconnectÊ()
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊreturnÊ@odbc_close($this->connection);
ÊÊÊÊ}
/**
Ê*ÊExecutesÊgivenÊSQLÊstatement.
Ê*
Ê*Ê@paramÊstringÊ$sqlÊSQLÊstatement
Ê*Ê@returnÊresourceÊResultÊresourceÊidentifier
Ê*Ê@accessÊprotected
Ê*/
ÊÊÊÊfunctionÊ_executeÊ($sql)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊreturnÊodbc_exec($this->connection,Ê$sql);
ÊÊÊÊ}
/**
Ê*ÊReturnsÊaÊrowÊfromÊgivenÊresultsetÊasÊanÊarrayÊ.
Ê*
Ê*Ê@paramÊboolÊ$assocÊAssociativeÊarrayÊonly,ÊorÊboth?
Ê*Ê@returnÊarrayÊTheÊfetchedÊrowÊasÊanÊarray
Ê*/
ÊÊÊÊfunctionÊfetchRowÊ($assocÊ=Êfalse)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊif(is_resource($this->_result))
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$this->resultSet($this->_result);
ÊÊÊÊÊÊÊÊÊÊÊÊ$resultRowÊ=Ê$this->fetchResult();
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ$resultRow;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊnull;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊ}
/**
Ê*ÊReturnsÊanÊarrayÊofÊsourcesÊ(tables)ÊinÊtheÊdatabase.
Ê*
Ê*Ê@returnÊarrayÊArrayÊofÊtablenamesÊinÊtheÊdatabase
Ê*/
ÊÊÊÊfunctionÊlistSourcesÊ()
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊ$resultÊ=Êodbc_tables($this->connection);
ÊÊÊÊÊÊÊÊifÊ(!$result)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊarray();
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$tablesÊ=Êarray();
ÊÊÊÊÊÊÊÊÊÊÊÊwhileÊ($lineÊ=Êodbc_fetch_array($result))
ÊÊÊÊÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ$tables[]Ê=Êstrtolower($line['TABLE_NAME']);
ÊÊÊÊÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ$tables;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊ}
/**
* Returns an array of the fields in given table name.
*
* @param Model $model Model object to describe
* @return array Fields in table. Keys are name and type
*/
ÊÊÊÊfunctionÊ&describeÊ(&$model)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊ$cacheÊ=Êparent::describe($model);
ÊÊÊÊÊÊÊÊifÊ($cacheÊ!=Ênull)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ$cache;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊ$fieldsÊ=Êarray();
ÊÊÊÊÊÊÊÊ$sqlÊ=Ê'SELECTÊ*ÊFROMÊ'Ê.Ê$this->name($model->table) . ' LIMIT 1';
ÊÊÊÊÊÊÊÊ$resultÊ=Êodbc_exec($this->connection,Ê$sql);
$count = odbc_num_fields($result);
ÊÊÊÊÊÊÊÊforÊ($i = 1;Ê$iÊ<=Ê$count;Ê$i++)
{
$cols[$i - 1]Ê=Êodbc_field_name($result,Ê$i);
}
ÊÊÊÊÊÊÊÊforeachÊ($colsÊasÊ$column)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$typeÊ=Êodbc_field_type(odbc_exec($this->connection,"SELECTÊ"Ê.Ê$columnÊ.Ê"ÊFROMÊ"Ê.Ê$model->table),Ê1);
ÊÊÊÊÊÊÊÊÊÊÊÊarray_push($fields,Êarray('name'Ê=>Ê$column,Ê'type'Ê=>Ê$type));
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊ$this->__cacheDescription($model->table,Ê$fields);
ÊÊÊÊÊÊÊÊreturnÊ$fields;
ÊÊÊÊ}
ÊÊÊÊÊÊÊÊ
ÊÊÊÊfunctionÊnameÊ($data)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ($dataÊ==Ê'*')
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ'*';
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊÊ$posÊ=Êstrpos($data,Ê'`');
ÊÊÊÊÊÊÊÊifÊ($posÊ===Êfalse)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$dataÊ=Ê''Ê.Êstr_replace('.',Ê'.',Ê$data)Ê.'';
ÊÊÊÊÊÊÊÊÊÊÊÊ//$dataÊ=Ê'`'.Êstr_replace('.',Ê'`.`',Ê$data)Ê.'`';
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊ$data;
ÊÊÊÊ}
/**
Ê*ÊReturnsÊaÊquotedÊandÊescapedÊstringÊofÊ$dataÊforÊuseÊinÊanÊSQLÊstatement.
Ê*
Ê*Ê@paramÊstringÊ$dataÊStringÊtoÊbeÊpreparedÊforÊuseÊinÊanÊSQLÊstatement
Ê*Ê@paramÊstringÊ$columnÊTheÊcolumnÊintoÊwhichÊthisÊdataÊwillÊbeÊinserted
Ê*Ê@returnÊstringÊQuotedÊandÊescaped
Ê*Ê@todoÊAddÊlogicÊthatÊformats/escapesÊdataÊbasedÊonÊcolumnÊtype
Ê*/
ÊÊÊÊfunctionÊvalueÊ($data,Ê$columnÊ=Ênull)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊ$parentÊ=Êparent::value($data,Ê$column);
ÊÊÊÊÊÊÊÊifÊ($parentÊ!=Ênull)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ$parent;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊifÊ($dataÊ===Ênull)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ'NULL';
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊifÊ(ini_get('magic_quotes_gpc')Ê==Ê1)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$dataÊ=Êstripslashes($data);
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊ//Ê$dataÊ=Êmysql_real_escape_string($data,Ê$this->connection);
ÊÊÊÊÊÊÊÊif(!is_numeric($data))
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$returnÊ=Ê"'"Ê.Ê$dataÊ.Ê"'";
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$returnÊ=Ê$data;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊ$return;
ÊÊÊÊ}
/**
Ê*ÊNotÊsureÊaboutÊthisÊone,ÊMySQLÊneedsÊitÊbutÊdoesÊODBC?ÊÊSaferÊjustÊtoÊleaveÊit
Ê*ÊTranslatesÊbetweenÊPHPÊbooleanÊvaluesÊandÊMySQLÊ(faked)ÊbooleanÊvalues
Ê*ÊÊ
Ê*Ê@paramÊmixedÊ$dataÊValueÊtoÊbeÊtranslated
Ê*Ê@returnÊmixedÊConvertedÊbooleanÊvalue
Ê*/
ÊÊÊÊfunctionÊbooleanÊ($data)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ($dataÊ===ÊtrueÊ||Ê$dataÊ===Êfalse)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊifÊ($dataÊ===Êtrue)
ÊÊÊÊÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ1;
ÊÊÊÊÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ0;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊifÊ(intval($dataÊ!==Ê0))
ÊÊÊÊÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊreturnÊtrue;
ÊÊÊÊÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊfalse;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊ}
/**
Ê*ÊBeginÊaÊtransaction
Ê*
Ê*Ê@paramÊunknown_typeÊ$model
Ê*Ê@returnÊbooleanÊTrueÊonÊsuccess,ÊfalseÊonÊfail
Ê*Ê(i.e.ÊifÊtheÊdatabase/modelÊdoesÊnotÊsupportÊtransactions).
Ê*/
ÊÊÊÊfunctionÊbeginÊ(&$model)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ(parent::begin($model))
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊifÊ(odbc_autocommit($this->connection, false))
ÊÊÊÊÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ$this->__transactionStartedÊ=Êtrue;
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊreturnÊtrue;
ÊÊÊÊÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊfalse;
ÊÊÊÊ}
/**
Ê*ÊCommitÊaÊtransaction
Ê*
Ê*Ê@paramÊunknown_typeÊ$model
Ê*Ê@returnÊbooleanÊTrueÊonÊsuccess,ÊfalseÊonÊfail
Ê*Ê(i.e.ÊifÊtheÊdatabase/modelÊdoesÊnotÊsupportÊtransactions,
Ê*ÊorÊaÊtransactionÊhasÊnotÊstarted).
Ê*/
ÊÊÊÊfunctionÊcommitÊ(&$model)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ(parent::commit($model))
ÊÊÊÊÊÊÊÊ{
if (odbc_commit($this->connection))
{
ÊÊÊÊÊÊÊÊÊÊÊÊ $this->__transactionStarted = false;
return true;
}
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊfalse;
ÊÊÊÊ}
/**
Ê*ÊRollbackÊaÊtransaction
Ê*
Ê*Ê@paramÊunknown_typeÊ$model
Ê*Ê@returnÊbooleanÊTrueÊonÊsuccess,ÊfalseÊonÊfail
Ê*Ê(i.e.ÊifÊtheÊdatabase/modelÊdoesÊnotÊsupportÊtransactions,
Ê*ÊorÊaÊtransactionÊhasÊnotÊstarted).
Ê*/
ÊÊÊÊfunctionÊrollbackÊ(&$model)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ(parent::rollback($model))
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$this->__transactionStarted = false;
returnÊodbc_rollback($this->connection);
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊfalse;
ÊÊÊÊ}
/**
Ê*ÊReturnsÊaÊformattedÊerrorÊmessageÊfromÊpreviousÊdatabaseÊoperation.
Ê*
Ê*Ê@returnÊstringÊErrorÊmessageÊwithÊerrorÊnumber
Ê*/
ÊÊÊÊfunctionÊlastErrorÊ()
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ(odbc_error($this->connection))
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊodbc_error($this->connection).':Ê'.odbc_errormsg($this->connection);
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊnull;
ÊÊÊÊ}
/**
Ê*ÊReturnsÊnumberÊofÊaffectedÊrowsÊinÊpreviousÊdatabaseÊoperation.ÊIfÊnoÊpreviousÊoperationÊexists,
Ê*ÊthisÊreturnsÊfalse.
Ê*
Ê*Ê@returnÊintÊNumberÊofÊaffectedÊrows
Ê*/
ÊÊÊÊfunctionÊlastAffectedÊ()
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ($this->_result)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊnull;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊnull;
ÊÊÊÊ}
/**
Ê*ÊReturnsÊnumberÊofÊrowsÊinÊpreviousÊresultset.ÊIfÊnoÊpreviousÊresultsetÊexists,
Ê*ÊthisÊreturnsÊfalse.
Ê*
Ê*Ê@returnÊintÊNumberÊofÊrowsÊinÊresultset
Ê*/
ÊÊÊÊfunctionÊlastNumRowsÊ()
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ($this->_result)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ@odbc_num_rows($this->_result);
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊreturnÊnull;
ÊÊÊÊ}
/**
Ê*ÊReturnsÊtheÊIDÊgeneratedÊfromÊtheÊpreviousÊINSERTÊoperation.
Ê*
Ê*Ê@paramÊunknown_typeÊ$source
Ê*Ê@returnÊint
Ê*/
ÊÊÊÊfunctionÊlastInsertIdÊ($sourceÊ=Ênull)
ÊÊÊÊ{
$result = $this->fetchAll('SELECT @@IDENTITY');
return $result[0];
ÊÊÊÊ}
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@paramÊstringÊ$realÊRealÊdatabase-layerÊcolumnÊtypeÊ(i.e.Ê"varchar(255)")
Ê*/
ÊÊÊÊfunctionÊcolumn($real)
ÊÊÊÊ{
if (is_array($real))
{
$col = $real['name'];
if (isset($real['limit']))
{
$col .= '('.$real['limit'].')';
}
return $col;
}
ÊÊÊÊÊÊÊÊreturnÊ$real;
ÊÊÊÊ}
/**
Ê*ÊEnterÊdescriptionÊhere...
Ê*
Ê*Ê@paramÊunknown_typeÊ$results
Ê*/
ÊÊÊÊfunctionÊresultSet(&$results)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊ$this->resultsÊ=&Ê$results;
ÊÊÊÊÊÊÊÊ$this->mapÊ=Êarray();
ÊÊÊÊÊÊÊÊ$num_fieldsÊ=Êodbc_num_fields($results);
ÊÊÊÊÊÊÊÊ$indexÊ=Ê0;
ÊÊÊÊÊÊÊÊ$jÊ=Ê0;
ÊÊÊÊÊÊÊÊwhileÊ($jÊ<Ê$num_fields)
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$columnÊ=Êodbc_fetch_array($results,$j);
ÊÊÊÊÊÊÊÊÊÊÊÊifÊ(!empty($column->table))
ÊÊÊÊÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ$this->map[$index++]Ê=Êarray($column->table,Ê$column->name);
ÊÊÊÊÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊechoÊarray(0,Ê$column->name);
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ$this->map[$index++]Ê=Êarray(0,Ê$column->name);
ÊÊÊÊÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊÊÊÊÊ$j++;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊ}
/**
Ê*ÊFetchesÊtheÊnextÊrowÊfromÊtheÊcurrentÊresultÊset
Ê*
Ê*Ê@returnÊunknown
Ê*/
ÊÊÊÊfunctionÊfetchResult()
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊifÊ($rowÊ=Êodbc_fetch_row($this->results))
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊ$resultRowÊ=Êarray();
ÊÊÊÊÊÊÊÊÊÊÊÊ$iÊ=0;
ÊÊÊÊÊÊÊÊÊÊÊÊforeachÊ($rowÊasÊ$indexÊ=>Ê$field)
ÊÊÊÊÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊlist($table,Ê$column)Ê=Ê$this->map[$index];
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ$resultRow[$table][$column]Ê=Ê$row[$index];
ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ$i++;
ÊÊÊÊÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊ$resultRow;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊÊÊÊÊelse
ÊÊÊÊÊÊÊÊ{
ÊÊÊÊÊÊÊÊÊÊÊÊreturnÊfalse;
ÊÊÊÊÊÊÊÊ}
ÊÊÊÊ}
ÊÊÊÊfunctionÊbuildSchemaQuery($schema)
ÊÊÊÊ{
ÊÊÊÊÊÊÊÊ$searchÊÊ=Êarray('{AUTOINCREMENT}',Ê'{PRIMARY}',Ê'{UNSIGNED}',Ê'{FULLTEXT}',
ÊÊÊÊÊÊÊÊ'{FULLTEXT_MYSQL}',Ê'{BOOLEAN}',Ê'{UTF_8}');
ÊÊÊÊÊÊÊÊ$replaceÊ=Êarray('int(11)ÊnotÊnullÊauto_increment',Ê'primaryÊkey',Ê'unsigned',
ÊÊÊÊÊÊÊÊ'FULLTEXT',Ê'FULLTEXT',Ê'enumÊ(\'true\',Ê\'false\')ÊNOTÊNULLÊdefaultÊ\'true\'',
ÊÊÊÊÊÊÊÊ'/*!40100ÊCHARACTERÊSETÊutf8ÊCOLLATEÊutf8_unicode_ciÊ*/');
ÊÊÊÊÊÊÊÊ$queryÊ=Êtrim(str_replace($search,Ê$replace,Ê$schema));
ÊÊÊÊÊÊÊÊreturnÊ$query;
ÊÊÊÊ}
}
?>