mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-16 11:58:25 +00:00
4a8c03ef1c
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
503 lines
No EOL
12 KiB
PHP
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;
|
|
ÊÊÊÊ}
|
|
}
|
|
?>
|