Project

General

Profile

Bug #22410 » 14050_cleaning_t3lib_sqlengine.patch

Administrator Admin, 2010-11-24 15:22

View differences:

t3lib/class.t3lib_sqlengine.php (revision )
<?php
/***************************************************************
* Copyright notice
*
* (c) 2004-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
* Copyright notice
*
* (c) 2004-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
* A copy is found in the textfile GPL.txt and important notices to the license
* from the author is found in LICENSE.txt distributed with these scripts.
*
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* PHP SQL engine
* EXPERIMENTAL!
......
*
*
* 104: class t3lib_sqlengine extends t3lib_sqlparser
* 126: function init($config, &$pObj)
* 126: function init($config, &$pObj)
* 134: function resetStatusVars()
* 134: function resetStatusVars()
* 150: function processAccordingToConfig(&$value,$fInfo)
* 150: function processAccordingToConfig(&$value,$fInfo)
*
* SECTION: SQL queries
* SECTION: SQL queries
* 205: function exec_INSERTquery($table,$fields_values)
* 205: function exec_INSERTquery($table,$fields_values)
* 273: function exec_UPDATEquery($table,$where,$fields_values)
* 273: function exec_UPDATEquery($table,$where,$fields_values)
* 332: function exec_DELETEquery($table,$where)
* 332: function exec_DELETEquery($table,$where)
* 383: function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit)
* 383: function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit)
* 426: function sql_query($query)
* 426: function sql_query($query)
* 437: function sql_error()
* 437: function sql_error()
* 446: function sql_insert_id()
* 446: function sql_insert_id()
* 455: function sql_affected_rows()
* 455: function sql_affected_rows()
* 465: function quoteStr($str)
* 465: function quoteStr($str)
*
* SECTION: SQL admin functions
* SECTION: SQL admin functions
* 490: function admin_get_tables()
* 490: function admin_get_tables()
* 501: function admin_get_fields($tableName)
* 501: function admin_get_fields($tableName)
* 512: function admin_get_keys($tableName)
* 512: function admin_get_keys($tableName)
* 523: function admin_query($query)
* 523: function admin_query($query)
*
* SECTION: Data Source I/O
* SECTION: Data Source I/O
* 548: function readDataSource($table)
* 548: function readDataSource($table)
* 560: function saveDataSource($table)
* 560: function saveDataSource($table)
*
* SECTION: SQL engine functions (PHP simulation of SQL) - still experimental
* SECTION: SQL engine functions (PHP simulation of SQL) - still experimental
* 590: function selectFromData($table,$where)
* 590: function selectFromData($table,$where)
* 628: function select_evalSingle($table,$config,&$itemKeys)
* 628: function select_evalSingle($table,$config,&$itemKeys)
* 747: function getResultSet($keys, $table, $fieldList)
* 747: function getResultSet($keys, $table, $fieldList)
*
* SECTION: Debugging
* SECTION: Debugging
* 790: function debug_printResultSet($array)
* 790: function debug_printResultSet($array)
*
*
* 829: class t3lib_sqlengine_resultobj
* 843: function sql_num_rows()
* 843: function sql_num_rows()
* 852: function sql_fetch_assoc()
* 852: function sql_fetch_assoc()
* 863: function sql_fetch_row()
* 863: function sql_fetch_row()
* 881: function sql_data_seek($pointer)
* 881: function sql_data_seek($pointer)
* 894: function sql_field_type()
* 894: function sql_field_type()
*
* TOTAL FUNCTIONS: 27
* (This index is automatically created/updated by the extension "extdeveval")
......
*/
/**
* PHP SQL engine / server
* Basically this is trying to emulation SQL record selection by PHP, thus allowing SQL queries into alternative data storages managed by PHP.
......
class t3lib_sqlengine extends t3lib_sqlparser {
// array with data records: [table name][num.index] = records
var $data = array(); // Data source storage
var $data = array(); // Data source storage
// Internal, SQL Status vars:
var $errorStatus = ''; // Set with error message of last operation
var $errorStatus = ''; // Set with error message of last operation
var $lastInsertedId = 0; // Set with last inserted unique ID
var $lastInsertedId = 0; // Set with last inserted unique ID
var $lastAffectedRows = 0; // Set with last number of affected rows.
var $lastAffectedRows = 0; // Set with last number of affected rows.
/**
* Constrcutor
*/
......
*
* @return void
*/
function resetStatusVars() {
function resetStatusVars() {
$this->errorStatus = '';
$this->lastInsertedId = 0;
$this->lastAffectedRows = 0;
......
* @param array $fInfo Field configuration data
* @return mixed The processed input value
*/
function processAccordingToConfig(&$value,$fInfo) {
function processAccordingToConfig(&$value, $fInfo) {
$options = $this->parseFieldDef($fInfo['Type']);
switch(strtolower($options['fieldType'])) {
switch (strtolower($options['fieldType'])) {
case 'int':
case 'smallint':
case 'tinyint':
case 'mediumint':
$value = intval($value);
if ($options['featureIndex']['UNSIGNED']) {
if ($options['featureIndex']['UNSIGNED']) {
$value = t3lib_div::intInRange($value,0);
$value = t3lib_div::intInRange($value, 0);
}
break;
case 'double':
$value = (double)$value;
$value = (double) $value;
break;
case 'varchar':
case 'char':
$value = substr($value,0,trim($options['value']));
$value = substr($value, 0, trim($options['value']));
break;
case 'text':
case 'blob':
$value = substr($value,0,65536);
$value = substr($value, 0, 65536);
break;
case 'tinytext':
case 'tinyblob':
$value = substr($value,0,256);
$value = substr($value, 0, 256);
break;
case 'mediumtext':
case 'mediumblob':
// ??
// ??
break;
}
}
/********************************
*
* SQL queries
......
* @param array Field values as key=>value pairs.
* @return boolean TRUE on success and FALSE on failure (error is set internally)
*/
function exec_INSERTquery($table,$fields_values) {
function exec_INSERTquery($table, $fields_values) {
// Initialize
$this->resetStatusVars();
......
$this->readDataSource($table);
// If data source is set:
if (is_array($this->data[$table])) {
if (is_array($this->data[$table])) {
$fieldInformation = $this->admin_get_fields($table); // Should cache this...!
$fieldInformation = $this->admin_get_fields($table); // Should cache this...!
// Looking for unique keys:
$saveArray = array();
foreach($fieldInformation as $fInfo) {
foreach ($fieldInformation as $fInfo) {
// Field name:
$fN = $fInfo['Field'];
// Set value:
// FIXME $options not defined
// FIXME $options not defined
$saveArray[$fN] = isset($fields_values[$fN]) ? $fields_values[$fN] : $options['Default'];
// Process value:
$this->processAccordingToConfig($saveArray[$fN], $fInfo);
// If an auto increment field is found, find the largest current uid:
if ($fInfo['Extra'] == 'auto_increment') {
if ($fInfo['Extra'] == 'auto_increment') {
// Get all UIDs:
$uidArray = array();
foreach($this->data[$table] as $r) {
foreach ($this->data[$table] as $r) {
$uidArray[] = $r[$fN];
}
// If current value is blank or already in array, we create a new:
if (!$saveArray[$fN] || in_array(intval($saveArray[$fN]), $uidArray)) {
if (!$saveArray[$fN] || in_array(intval($saveArray[$fN]), $uidArray)) {
if (count($uidArray)) {
if (count($uidArray)) {
$saveArray[$fN] = max($uidArray)+1;
$saveArray[$fN] = max($uidArray) + 1;
} else $saveArray[$fN] = 1;
} else {
$saveArray[$fN] = 1;
}
}
}
// Update "last inserted id":
$this->lastInsertedId = $saveArray[$fN];
......
$this->saveDataSource($table);
return TRUE;
} else $this->errorStatus = 'No data loaded.';
} else {
$this->errorStatus = 'No data loaded.';
}
return FALSE;
}
......
* @param array Field values as key=>value pairs.
* @return boolean TRUE on success and FALSE on failure (error is set internally)
*/
function exec_UPDATEquery($table,$where,$fields_values) {
function exec_UPDATEquery($table, $where, $fields_values) {
// Initialize:
$this->resetStatusVars();
......
$this->readDataSource($table);
// If anything is there:
if (is_array($this->data[$table])) {
if (is_array($this->data[$table])) {
// Parse WHERE clause:
$where = $this->parseWhereClause($where);
if (is_array($where)) {
if (is_array($where)) {
// Field information
$fieldInformation = $this->admin_get_fields($table); // Should cache this...!
$fieldInformation = $this->admin_get_fields($table); // Should cache this...!
// Traverse fields to update:
foreach($fields_values as $fName => $fValue) {
foreach ($fields_values as $fName => $fValue) {
$this->processAccordingToConfig($fields_values[$fName],$fieldInformation[$fName]);
$this->processAccordingToConfig($fields_values[$fName], $fieldInformation[$fName]);
}
// Do query, returns array with keys to the data array of the result:
$itemKeys = $this->selectFromData($table,$where);
$itemKeys = $this->selectFromData($table, $where);
// Set "last affected rows":
$this->lastAffectedRows = count($itemKeys);
// Update rows:
if ($this->lastAffectedRows) {
if ($this->lastAffectedRows) {
// Traverse result set here:
foreach($itemKeys as $dataArrayKey) {
foreach ($itemKeys as $dataArrayKey) {
// Traverse fields to update:
foreach($fields_values as $fName => $fValue) {
foreach ($fields_values as $fName => $fValue) {
$this->data[$table][$dataArrayKey][$fName] = $fValue;
}
}
// Save data source
// Save data source
$this->saveDataSource($table);
}
return TRUE;
} else $this->errorStatus = 'WHERE clause contained errors: '.$where;
} else $this->errorStatus = 'No data loaded.';
} else {
$this->errorStatus = 'WHERE clause contained errors: ' . $where;
}
} else {
$this->errorStatus = 'No data loaded.';
}
return FALSE;
}
......
* @param string WHERE clause
* @return boolean TRUE on success and FALSE on failure (error is set internally)
*/
function exec_DELETEquery($table,$where) {
function exec_DELETEquery($table, $where) {
// Initialize:
$this->resetStatusVars();
......
$this->readDataSource($table);
// If anything is there:
if (is_array($this->data[$table])) {
if (is_array($this->data[$table])) {
// Parse WHERE clause:
$where = $this->parseWhereClause($where);
if (is_array($where)) {
if (is_array($where)) {
// Do query, returns array with keys to the data array of the result:
$itemKeys = $this->selectFromData($table,$where);
$itemKeys = $this->selectFromData($table, $where);
// Set "last affected rows":
$this->lastAffectedRows = count($itemKeys);
// Remove rows:
if ($this->lastAffectedRows) {
if ($this->lastAffectedRows) {
// Traverse result set:
foreach($itemKeys as $dataArrayKey) {
foreach ($itemKeys as $dataArrayKey) {
unset($this->data[$table][$dataArrayKey]);
}
......
}
return TRUE;
} else $this->errorStatus = 'WHERE clause contained errors: '.$where;
} else $this->errorStatus = 'No data loaded.';
} else {
$this->errorStatus = 'WHERE clause contained errors: ' . $where;
}
} else {
$this->errorStatus = 'No data loaded.';
}
return FALSE;
}
......
* @param string Optional LIMIT value ([begin,]max), if none, supply blank string.
* @return object Returns result object, but if errors, returns false
*/
function exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit) {
function exec_SELECTquery($select_fields, $from_table, $where_clause, $groupBy, $orderBy, $limit) {
// Initialize:
$this->resetStatusVars();
// Create result object
$sqlObj = t3lib_div::makeInstance('t3lib_sqlengine_resultobj');
$sqlObj->result = array(); // Empty result as a beginning
$sqlObj->result = array(); // Empty result as a beginning
// Get table list:
$tableArray = $this->parseFromTables($from_table);
......
$this->readDataSource($table);
// If anything is there:
if (is_array($this->data[$table])) {
if (is_array($this->data[$table])) {
// Parse WHERE clause:
$where = $this->parseWhereClause($where_clause);
if (is_array($where)) {
if (is_array($where)) {
// Do query, returns array with keys to the data array of the result:
$itemKeys = $this->selectFromData($table,$where);
$itemKeys = $this->selectFromData($table, $where);
// Finally, read the result rows into this variable:
$sqlObj->result = $this->getResultSet($itemKeys,$table,'*');
$sqlObj->result = $this->getResultSet($itemKeys, $table, '*');
// Reset and return result:
reset($sqlObj->result);
return $sqlObj;
} else $this->errorStatus = 'WHERE clause contained errors: '.$where;
} else $this->errorStatus = 'No data loaded: '.$this->errorStatus;
} else {
$this->errorStatus = 'WHERE clause contained errors: ' . $where;
}
} else {
$this->errorStatus = 'No data loaded: ' . $this->errorStatus;
}
return FALSE;
}
......
* @param string Query to execute
* @return object Result object or false if error
*/
function sql_query($query) {
function sql_query($query) {
$res = t3lib_div::makeInstance('t3lib_sqlengine_resultobj');
$res->result = array();
return $res;
......
*
* @return string Error message, if any
*/
function sql_error() {
function sql_error() {
return $this->errorStatus;
}
......
* @param string Input String
* @return string String, with quotes escaped
*/
function quoteStr($str) {
function quoteStr($str) {
return addslashes($str);
}
/**************************************
*
* SQL admin functions
......
* @return array Tables in an array (tablename is in both key and value)
* @todo Should return table details in value! see t3lib_db::admin_get_tables()
*/
function admin_get_tables() {
function admin_get_tables() {
$whichTables = array();
return $whichTables;
}
......
* @param string Table name
* @return array Field information in an associative array with fieldname => field row
*/
function admin_get_fields($tableName) {
function admin_get_fields($tableName) {
$output = array();
return $output;
}
......
* @param string Table name
* @return array Key information in a numeric array
*/
function admin_get_keys($tableName) {
function admin_get_keys($tableName) {
$output = array();
return $output;
}
......
* @param string Query to execute
* @return pointer Result pointer
*/
function admin_query($query) {
function admin_query($query) {
return $this->sql_query($query);
}
/********************************
*
* Data Source I/O
......
* @return void
* @todo Table locking tools?
*/
function readDataSource($table) {
function readDataSource($table) {
$this->data[$table] = array();
}
......
* @return void
* @todo Table locking tools?
*/
function saveDataSource($table) {
function saveDataSource($table) {
debug($this->data[$table]);
}
/********************************
*
* SQL engine functions (PHP simulation of SQL) - still experimental
......
* @param array Where clause parsed into array
* @return array Array of keys pointing to result rows in $this->data[$table]
*/
function selectFromData($table,$where) {
function selectFromData($table, $where) {
$output = array();
if (is_array($this->data[$table])) {
if (is_array($this->data[$table])) {
// All keys:
$OR_index = 0;
$itemKeys = array();
foreach($where as $config) {
foreach ($where as $config) {
if (strtoupper($config['operator'])=='OR') {
if (strtoupper($config['operator']) == 'OR') {
$OR_index++;
}
if (!isset($itemKeys[$OR_index])) $itemKeys[$OR_index] = array_keys($this->data[$table]);
if (!isset($itemKeys[$OR_index])) {
$itemKeys[$OR_index] = array_keys($this->data[$table]);
}
$this->select_evalSingle($table,$config,$itemKeys[$OR_index]);
$this->select_evalSingle($table, $config, $itemKeys[$OR_index]);
}
foreach($itemKeys as $uidKeys) {
foreach ($itemKeys as $uidKeys) {
$output = array_merge($output, $uidKeys);
}
$output = array_unique($output);
......
* @return void Data array passed by reference
* @see selectFromData()
*/
function select_evalSingle($table,$config,&$itemKeys) {
function select_evalSingle($table, $config, &$itemKeys) {
$neg = preg_match('/^AND[[:space:]]+NOT$/',trim($config['operator']));
$neg = preg_match('/^AND[[:space:]]+NOT$/', trim($config['operator']));
if (is_array($config['sub'])) {
if (is_array($config['sub'])) {
$subSelKeys = $this->selectFromData($table,$config['sub']);
$subSelKeys = $this->selectFromData($table, $config['sub']);
if ($neg) {
if ($neg) {
foreach($itemKeys as $kk => $vv) {
foreach ($itemKeys as $kk => $vv) {
if (in_array($vv,$subSelKeys)) {
if (in_array($vv, $subSelKeys)) {
unset($itemKeys[$kk]);
}
}
......
$itemKeys = array_intersect($itemKeys, $subSelKeys);
}
} else {
$comp = strtoupper(str_replace(array(' ',TAB,CR,LF),'',$config['comparator']));
$comp = strtoupper(str_replace(array(' ', TAB, CR, LF), '', $config['comparator']));
$mod = strtoupper($config['modifier']);
switch($comp) {
switch ($comp) {
case 'NOTLIKE':
case 'LIKE':
$like_value = strtolower($config['value'][0]);
if (substr($like_value,0,1)=='%') {
if (substr($like_value, 0, 1) == '%') {
$wildCard_begin = TRUE;
$like_value = substr($like_value,1);
$like_value = substr($like_value, 1);
}
if (substr($like_value,-1)=='%') {
if (substr($like_value, -1) == '%') {
$wildCard_end = TRUE;
$like_value = substr($like_value,0,-1);
$like_value = substr($like_value, 0, -1);
}
break;
case 'NOTIN':
case 'IN':
$in_valueArray = array();
foreach($config['value'] as $vParts) {
foreach ($config['value'] as $vParts) {
$in_valueArray[] = (string)$vParts[0];
$in_valueArray[] = (string) $vParts[0];
}
break;
}
foreach($itemKeys as $kk => $v) {
foreach ($itemKeys as $kk => $v) {
$field_value = $this->data[$table][$v][$config['field']];
// Calculate it:
if ($config['calc']=='&') {
if ($config['calc'] == '&') {
$field_value&=intval($config['calc_value']);
$field_value &= intval($config['calc_value']);
}
// Compare it:
switch($comp) {
switch ($comp) {
case '<=':
$bool = $field_value <= $config['value'][0];
break;
......
$bool = $field_value > $config['value'][0];
break;
case '=':
$bool = !strcmp($field_value,$config['value'][0]);
$bool = !strcmp($field_value, $config['value'][0]);
break;
case '!=':
$bool = strcmp($field_value,$config['value'][0]);
$bool = strcmp($field_value, $config['value'][0]);
break;
case 'NOTIN':
case 'IN':
$bool = in_array((string)$field_value, $in_valueArray);
$bool = in_array((string) $field_value, $in_valueArray);
if ($comp=='NOTIN') $bool = !$bool;
if ($comp == 'NOTIN') {
$bool = !$bool;
}
break;
case 'NOTLIKE':
case 'LIKE':
if (!strlen($like_value)) {
if (!strlen($like_value)) {
$bool = TRUE;
} elseif ($wildCard_begin && !$wildCard_end) {
} elseif ($wildCard_begin && !$wildCard_end) {
$bool = !strcmp(substr(strtolower($field_value),-strlen($like_value)),$like_value);
$bool = !strcmp(substr(strtolower($field_value), -strlen($like_value)), $like_value);
} elseif (!$wildCard_begin && $wildCard_end) {
} elseif (!$wildCard_begin && $wildCard_end) {
$bool = !strcmp(substr(strtolower($field_value),0,strlen($like_value)),$like_value);
$bool = !strcmp(substr(strtolower($field_value), 0, strlen($like_value)), $like_value);
} elseif ($wildCard_begin && $wildCard_end) {
} elseif ($wildCard_begin && $wildCard_end) {
$bool = strstr($field_value,$like_value);
$bool = strstr($field_value, $like_value);
} else {
$bool = !strcmp(strtolower($field_value),$like_value);
$bool = !strcmp(strtolower($field_value), $like_value);
}
if ($comp=='NOTLIKE') $bool = !$bool;
if ($comp == 'NOTLIKE') {
$bool = !$bool;
}
break;
default:
$bool = $field_value ? TRUE : FALSE;
......
}
// General negation:
if ($neg) $bool = !$bool;
if ($neg) {
$bool = !$bool;
}
// Modify?
switch($mod) {
switch ($mod) {
case 'NOT':
case '!':
$bool = !$bool;
......
}
// Action:
if (!$bool) {
if (!$bool) {
unset($itemKeys[$kk]);
}
}
......
* @param string Fieldlist (commaseparated)
* @return array Result array with "rows"
*/
function getResultSet($keys, $table, $fieldList) {
function getResultSet($keys, $table, $fieldList) {
$fields = t3lib_div::trimExplode(',',$fieldList);
$fields = t3lib_div::trimExplode(',', $fieldList);
$output = array();
foreach($keys as $kValue) {
foreach ($keys as $kValue) {
if ($fieldList=='*') {
if ($fieldList == '*') {
$output[$kValue] = $this->data[$table][$kValue];
} else {
foreach($fields as $fieldName) {
foreach ($fields as $fieldName) {
$output[$kValue][$fieldName] = $this->data[$table][$kValue][$fieldName];
}
}
......
}
/*************************
*
* Debugging
......
* @param array Result set array (array of rows)
* @return string HTML table
*/
function debug_printResultSet($array) {
function debug_printResultSet($array) {
if (count($array)) {
if (count($array)) {
$tRows=array();
$tRows = array();
$fields = array_keys(current($array));
$tCell[]='
$tCell[] = '
<td>IDX</td>';
foreach($fields as $fieldName) {
foreach ($fields as $fieldName) {
$tCell[]='
$tCell[] = '
<td>'.htmlspecialchars($fieldName).'</td>';
<td>' . htmlspecialchars($fieldName) . '</td>';
}
}
$tRows[]='<tr>'.implode('',$tCell).'</tr>';
$tRows[] = '<tr>' . implode('', $tCell) . '</tr>';
foreach($array as $index => $rec) {
foreach ($array as $index => $rec) {
$tCell=array();
$tCell = array();
$tCell[]='
$tCell[] = '
<td>'.htmlspecialchars($index).'</td>';
<td>' . htmlspecialchars($index) . '</td>';
foreach($fields as $fieldName) {
foreach ($fields as $fieldName) {
$tCell[]='
$tCell[] = '
<td>'.htmlspecialchars($rec[$fieldName]).'</td>';
<td>' . htmlspecialchars($rec[$fieldName]) . '</td>';
}
$tRows[]='<tr>'.implode('',$tCell).'</tr>';
$tRows[] = '<tr>' . implode('', $tCell) . '</tr>';
}
return '<table border="1">'.implode('',$tRows).'</table>';
return '<table border="1">' . implode('', $tRows) . '</table>';
} else 'Empty resultset';
} else {
'Empty resultset';
}
}
}
}
}
/**
......
*
* @return integer
*/
function sql_num_rows() {
function sql_num_rows() {
return count($this->result);
}
......
*
* @return array Associative array
*/
function sql_fetch_assoc() {
function sql_fetch_assoc() {
$row = current($this->result);
next($this->result);
return $row;
......
*
* @return array Numerical array
*/
function sql_fetch_row() {
function sql_fetch_row() {
$resultRow = $this->sql_fetch_assoc();
if (is_array($resultRow)) {
if (is_array($resultRow)) {
$numArray = array();
foreach($resultRow as $value) {
foreach ($resultRow as $value) {
$numArray[]=$value;
$numArray[] = $value;
}
return $numArray;
}
......
* @param integer Position pointer.
* @return boolean Returns true on success
*/
function sql_data_seek($pointer) {
function sql_data_seek($pointer) {
reset($this->result);
for ($a=0;$a<$pointer;$a++) {
for ($a = 0; $a < $pointer; $a++) {
next($this->result);
}
return TRUE;
......
*
* @return string Blank string, not supported (it seems)
*/
function sql_field_type() {
function sql_field_type() {
return '';
}
}
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_sqlengine.php']) {
if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_sqlengine.php']) {
include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_sqlengine.php']);
}
(54-54/93)