<?php include_once '../doc-typo3-funcs.php'; $doxygen_vars = array( "title" => "TYPO3 4.0.1: typo3_src-4.0.1/t3lib/class.t3lib_sqlengine.php Source File", "datetime" => "Sat Dec 2 19:22:18 2006", "date" => "2 Dec 2006", "doxygenversion" => "1.4.6", "projectname" => "TYPO3 4.0.1", "projectnumber" => "4.0.1" ); get_header($doxygen_vars); ?> <!-- Generated by Doxygen 1.4.6 --> <div class="tabs"> <ul> <li><a href="main.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="classes.html"><span>Classes</span></a></li> <li id="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="examples.html"><span>Examples</span></a></li> <li> <form action="search.php" method="get"> <table cellspacing="0" cellpadding="0" border="0"> <tr> <td><label> <u>S</u>earch for </label></td> <td><input type="text" name="query" value="" size="20" accesskey="s"/></td> </tr> </table> </form> </li> </ul></div> <div class="nav"> <a class="el" href="dir_c8daf1ad746050abf985cc546c89e248.html">typo3_src-4.0.1</a> » <a class="el" href="dir_9d0e5c424a38b69aeeedc616a9634e5f.html">t3lib</a></div> <h1>class.t3lib_sqlengine.php</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <?php <a name="l00002"></a>00002 <span class="comment">/***************************************************************</span> <a name="l00003"></a>00003 <span class="comment">* Copyright notice</span> <a name="l00004"></a>00004 <span class="comment">*</span> <a name="l00005"></a>00005 <span class="comment">* (c) 2004-2006 Kasper Skaarhoj (kasperYYYY@typo3.com)</span> <a name="l00006"></a>00006 <span class="comment">* All rights reserved</span> <a name="l00007"></a>00007 <span class="comment">*</span> <a name="l00008"></a>00008 <span class="comment">* This script is part of the TYPO3 project. The TYPO3 project is</span> <a name="l00009"></a>00009 <span class="comment">* free software; you can redistribute it and/or modify</span> <a name="l00010"></a>00010 <span class="comment">* it under the terms of the GNU General Public License as published by</span> <a name="l00011"></a>00011 <span class="comment">* the Free Software Foundation; either version 2 of the License, or</span> <a name="l00012"></a>00012 <span class="comment">* (at your option) any later version.</span> <a name="l00013"></a>00013 <span class="comment">*</span> <a name="l00014"></a>00014 <span class="comment">* The GNU General Public License can be found at</span> <a name="l00015"></a>00015 <span class="comment">* http://www.gnu.org/copyleft/gpl.html.</span> <a name="l00016"></a>00016 <span class="comment">* A copy is found in the textfile GPL.txt and important notices to the license</span> <a name="l00017"></a>00017 <span class="comment">* from the author is found in LICENSE.txt distributed with these scripts.</span> <a name="l00018"></a>00018 <span class="comment">*</span> <a name="l00019"></a>00019 <span class="comment">*</span> <a name="l00020"></a>00020 <span class="comment">* This script is distributed in the hope that it will be useful,</span> <a name="l00021"></a>00021 <span class="comment">* but WITHOUT ANY WARRANTY; without even the implied warranty of</span> <a name="l00022"></a>00022 <span class="comment">* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> <a name="l00023"></a>00023 <span class="comment">* GNU General Public License for more details.</span> <a name="l00024"></a>00024 <span class="comment">*</span> <a name="l00025"></a>00025 <span class="comment">* This copyright notice MUST APPEAR in all copies of the script!</span> <a name="l00026"></a>00026 <span class="comment">***************************************************************/</span> <a name="l00092"></a>00092 require_once(PATH_t3lib.'<span class="keyword">class</span>.t3lib_sqlparser.php'); <a name="l00093"></a>00093 <a name="l00094"></a>00094 <a name="l00104"></a><a class="code" href="classt3lib__sqlengine.html">00104</a> <span class="keyword">class </span><a class="code" href="classt3lib__sqlengine.html">t3lib_sqlengine</a> <span class="keyword">extends</span> <a class="code" href="classt3lib__sqlparser.html">t3lib_sqlparser</a> { <a name="l00105"></a>00105 <a name="l00106"></a>00106 <span class="comment">// array with data records: [table name][num.index] = records</span> <a name="l00107"></a><a class="code" href="classt3lib__sqlengine.html#d51abdfbc4353f9cbb74d62c94881f7c">00107</a> var <a class="code" href="classt3lib__sqlengine.html#d51abdfbc4353f9cbb74d62c94881f7c">$data</a> = array(); <span class="comment">// Data source storage</span> <a name="l00108"></a>00108 <a name="l00109"></a>00109 <a name="l00110"></a>00110 <span class="comment">// Internal, SQL Status vars:</span> <a name="l00111"></a><a class="code" href="classt3lib__sqlengine.html#eaec8c35837f5a3e987faf2392aeacfd">00111</a> var <a class="code" href="classt3lib__sqlengine.html#eaec8c35837f5a3e987faf2392aeacfd">$errorStatus</a> = ''; <span class="comment">// Set with error message of last operation</span> <a name="l00112"></a><a class="code" href="classt3lib__sqlengine.html#73041fa20d235084d489c7deeb73320a">00112</a> var <a class="code" href="classt3lib__sqlengine.html#73041fa20d235084d489c7deeb73320a">$lastInsertedId</a> = 0; <span class="comment">// Set with last inserted unique ID</span> <a name="l00113"></a><a class="code" href="classt3lib__sqlengine.html#54ef06924b19f8c662f4c8d8e92f7fb0">00113</a> var <a class="code" href="classt3lib__sqlengine.html#54ef06924b19f8c662f4c8d8e92f7fb0">$lastAffectedRows</a> = 0; <span class="comment">// Set with last number of affected rows.</span> <a name="l00114"></a>00114 <a name="l00115"></a>00115 <a name="l00116"></a>00116 <a name="l00117"></a>00117 <a name="l00118"></a>00118 <a name="l00126"></a><a class="code" href="classt3lib__sqlengine.html#0f9a160d78748c8c140c764c476b3f55">00126</a> function <a class="code" href="classt3lib__sqlengine.html#0f9a160d78748c8c140c764c476b3f55">init</a>($config, &$pObj) { <a name="l00127"></a>00127 } <a name="l00128"></a>00128 <a name="l00134"></a><a class="code" href="classt3lib__sqlengine.html#25792b0964b3e0cb64ba11431ee22d9e">00134</a> function <a class="code" href="classt3lib__sqlengine.html#25792b0964b3e0cb64ba11431ee22d9e">resetStatusVars</a>() { <a name="l00135"></a>00135 $this->errorStatus = ''; <a name="l00136"></a>00136 $this->lastInsertedId = 0; <a name="l00137"></a>00137 $this->lastAffectedRows = 0; <a name="l00138"></a>00138 } <a name="l00139"></a>00139 <a name="l00150"></a><a class="code" href="classt3lib__sqlengine.html#d93c7545fe6dad85e7827a99b2d357ee">00150</a> function <a class="code" href="classt3lib__sqlengine.html#d93c7545fe6dad85e7827a99b2d357ee">processAccordingToConfig</a>(&$value,$fInfo) { <a name="l00151"></a>00151 $options = $this-><a class="code" href="classt3lib__sqlparser.html#794b29918fe99ccb55c0453b2402796f">parseFieldDef</a>($fInfo['Type']); <a name="l00152"></a>00152 <a name="l00153"></a>00153 <span class="keywordflow">switch</span>(strtolower($options['fieldType'])) { <a name="l00154"></a>00154 <span class="keywordflow">case</span> '<span class="keywordtype">int</span>': <a name="l00155"></a>00155 <span class="keywordflow">case</span> 'smallint': <a name="l00156"></a>00156 <span class="keywordflow">case</span> 'tinyint': <a name="l00157"></a>00157 <span class="keywordflow">case</span> 'mediumint': <a name="l00158"></a>00158 $value = intval($value); <a name="l00159"></a>00159 <span class="keywordflow">if</span> ($options['featureIndex']['UNSIGNED']) { <a name="l00160"></a>00160 $value = <a class="code" href="classt3lib__div.html#79f6a47a7658e28e3f65666f8ebc19f8">t3lib_div::intInRange</a>($value,0); <a name="l00161"></a>00161 } <a name="l00162"></a>00162 <span class="keywordflow">break</span>; <a name="l00163"></a>00163 <span class="keywordflow">case</span> '<span class="keywordtype">double</span>': <a name="l00164"></a>00164 $value = (double)$value; <a name="l00165"></a>00165 <span class="keywordflow">break</span>; <a name="l00166"></a>00166 <span class="keywordflow">case</span> 'varchar': <a name="l00167"></a>00167 <span class="keywordflow">case</span> '<span class="keywordtype">char</span>': <a name="l00168"></a>00168 $value = substr($value,0,trim($options['value'])); <a name="l00169"></a>00169 <span class="keywordflow">break</span>; <a name="l00170"></a>00170 <span class="keywordflow">case</span> 'text': <a name="l00171"></a>00171 <span class="keywordflow">case</span> 'blob': <a name="l00172"></a>00172 $value = substr($value,0,65536); <a name="l00173"></a>00173 <span class="keywordflow">break</span>; <a name="l00174"></a>00174 <span class="keywordflow">case</span> 'tinytext': <a name="l00175"></a>00175 <span class="keywordflow">case</span> 'tinyblob': <a name="l00176"></a>00176 $value = substr($value,0,256); <a name="l00177"></a>00177 <span class="keywordflow">break</span>; <a name="l00178"></a>00178 <span class="keywordflow">case</span> 'mediumtext': <a name="l00179"></a>00179 <span class="keywordflow">case</span> 'mediumblob': <a name="l00180"></a>00180 <span class="comment">// ??</span> <a name="l00181"></a>00181 <span class="keywordflow">break</span>; <a name="l00182"></a>00182 } <a name="l00183"></a>00183 } <a name="l00184"></a>00184 <a name="l00185"></a>00185 <a name="l00186"></a>00186 <a name="l00187"></a>00187 <a name="l00188"></a>00188 <a name="l00189"></a>00189 <a name="l00190"></a>00190 <a name="l00191"></a>00191 <span class="comment">/********************************</span> <a name="l00192"></a>00192 <span class="comment"> *</span> <a name="l00193"></a>00193 <span class="comment"> * SQL queries</span> <a name="l00194"></a>00194 <span class="comment"> * This is the SQL access functions used when this class is instantiated as a SQL handler with DBAL. Override these in derived classes.</span> <a name="l00195"></a>00195 <span class="comment"> *</span> <a name="l00196"></a>00196 <span class="comment"> ********************************/</span> <a name="l00197"></a>00197 <a name="l00205"></a><a class="code" href="classt3lib__sqlengine.html#84767b4ee755822a5b59fe6ed6e99620">00205</a> function <a class="code" href="classt3lib__sqlengine.html#84767b4ee755822a5b59fe6ed6e99620">exec_INSERTquery</a>($table,$fields_values) { <a name="l00206"></a>00206 <a name="l00207"></a>00207 <span class="comment">// Initialize</span> <a name="l00208"></a>00208 $this-><a class="code" href="classt3lib__sqlengine.html#25792b0964b3e0cb64ba11431ee22d9e">resetStatusVars</a>(); <a name="l00209"></a>00209 <a name="l00210"></a>00210 <span class="comment">// Reading Data Source if not done already.</span> <a name="l00211"></a>00211 $this-><a class="code" href="classt3lib__sqlengine.html#c97d28fca141ebe201c5eb79cfee8822">readDataSource</a>($table); <a name="l00212"></a>00212 <a name="l00213"></a>00213 <span class="comment">// If data source is set:</span> <a name="l00214"></a>00214 <span class="keywordflow">if</span> (is_array($this->data[$table])) { <a name="l00215"></a>00215 <a name="l00216"></a>00216 $fieldInformation = $this-><a class="code" href="classt3lib__sqlengine.html#ce6301c93f6d72c0574ef57897924559">admin_get_fields</a>($table); <span class="comment">// Should cache this...!</span> <a name="l00217"></a>00217 <a name="l00218"></a>00218 <span class="comment">// Looking for unique keys:</span> <a name="l00219"></a>00219 $saveArray = array(); <a name="l00220"></a>00220 foreach($fieldInformation as $fInfo) { <a name="l00221"></a>00221 <a name="l00222"></a>00222 <span class="comment">// Field name:</span> <a name="l00223"></a>00223 $fN = $fInfo['Field']; <a name="l00224"></a>00224 <a name="l00225"></a>00225 <span class="comment">// Set value:</span> <a name="l00226"></a>00226 <span class="comment">// FIXME $options not defined</span> <a name="l00227"></a>00227 $saveArray[$fN] = isset($fields_values[$fN]) ? $fields_values[$fN] : $options['Default']; <a name="l00228"></a>00228 <a name="l00229"></a>00229 <span class="comment">// Process value:</span> <a name="l00230"></a>00230 $this-><a class="code" href="classt3lib__sqlengine.html#d93c7545fe6dad85e7827a99b2d357ee">processAccordingToConfig</a>($saveArray[$fN], $fInfo); <a name="l00231"></a>00231 <a name="l00232"></a>00232 <span class="comment">// If an auto increment field is found, find the largest current uid:</span> <a name="l00233"></a>00233 <span class="keywordflow">if</span> ($fInfo['Extra'] == 'auto_increment') { <a name="l00234"></a>00234 <a name="l00235"></a>00235 <span class="comment">// Get all UIDs:</span> <a name="l00236"></a>00236 $uidArray = array(); <a name="l00237"></a>00237 foreach($this->data[$table] as $r) { <a name="l00238"></a>00238 $uidArray[] = $r[$fN]; <a name="l00239"></a>00239 } <a name="l00240"></a>00240 <a name="l00241"></a>00241 <span class="comment">// If current value is blank or already in array, we create a new:</span> <a name="l00242"></a>00242 <span class="keywordflow">if</span> (!$saveArray[$fN] || in_array(intval($saveArray[$fN]), $uidArray)) { <a name="l00243"></a>00243 <span class="keywordflow">if</span> (count($uidArray)) { <a name="l00244"></a>00244 $saveArray[$fN] = max($uidArray)+1; <a name="l00245"></a>00245 } <span class="keywordflow">else</span> $saveArray[$fN] = 1; <a name="l00246"></a>00246 } <a name="l00247"></a>00247 <a name="l00248"></a>00248 <span class="comment">// Update "last inserted id":</span> <a name="l00249"></a>00249 $this->lastInsertedId = $saveArray[$fN]; <a name="l00250"></a>00250 } <a name="l00251"></a>00251 } <a name="l00252"></a>00252 <a name="l00253"></a>00253 <span class="comment">// Insert row in table:</span> <a name="l00254"></a>00254 $this->data[$table][] = $saveArray; <a name="l00255"></a>00255 <a name="l00256"></a>00256 <span class="comment">// Save data source</span> <a name="l00257"></a>00257 $this-><a class="code" href="classt3lib__sqlengine.html#db6238001fb99accc1dcaf6a870b0b72">saveDataSource</a>($table); <a name="l00258"></a>00258 <a name="l00259"></a>00259 <span class="keywordflow">return</span> TRUE; <a name="l00260"></a>00260 } <span class="keywordflow">else</span> $this->errorStatus = 'No data loaded.'; <a name="l00261"></a>00261 <a name="l00262"></a>00262 <span class="keywordflow">return</span> FALSE; <a name="l00263"></a>00263 } <a name="l00264"></a>00264 <a name="l00273"></a><a class="code" href="classt3lib__sqlengine.html#4ee165ae1d61dc51eb4fb9343a54ce62">00273</a> function <a class="code" href="classt3lib__sqlengine.html#4ee165ae1d61dc51eb4fb9343a54ce62">exec_UPDATEquery</a>($table,$where,$fields_values) { <a name="l00274"></a>00274 <a name="l00275"></a>00275 <span class="comment">// Initialize:</span> <a name="l00276"></a>00276 $this-><a class="code" href="classt3lib__sqlengine.html#25792b0964b3e0cb64ba11431ee22d9e">resetStatusVars</a>(); <a name="l00277"></a>00277 <a name="l00278"></a>00278 <span class="comment">// Reading Data Source if not done already.</span> <a name="l00279"></a>00279 $this-><a class="code" href="classt3lib__sqlengine.html#c97d28fca141ebe201c5eb79cfee8822">readDataSource</a>($table); <a name="l00280"></a>00280 <a name="l00281"></a>00281 <span class="comment">// If anything is there:</span> <a name="l00282"></a>00282 <span class="keywordflow">if</span> (is_array($this->data[$table])) { <a name="l00283"></a>00283 <a name="l00284"></a>00284 <span class="comment">// Parse WHERE clause:</span> <a name="l00285"></a>00285 $where = $this-><a class="code" href="classt3lib__sqlparser.html#150e4f0572e42e372ae92017fbec7279">parseWhereClause</a>($where); <a name="l00286"></a>00286 <a name="l00287"></a>00287 <span class="keywordflow">if</span> (is_array($where)) { <a name="l00288"></a>00288 <a name="l00289"></a>00289 <span class="comment">// Field information</span> <a name="l00290"></a>00290 $fieldInformation = $this-><a class="code" href="classt3lib__sqlengine.html#ce6301c93f6d72c0574ef57897924559">admin_get_fields</a>($table); <span class="comment">// Should cache this...!</span> <a name="l00291"></a>00291 <a name="l00292"></a>00292 <span class="comment">// Traverse fields to update:</span> <a name="l00293"></a>00293 foreach($fields_values as $fName => $fValue) { <a name="l00294"></a>00294 $this-><a class="code" href="classt3lib__sqlengine.html#d93c7545fe6dad85e7827a99b2d357ee">processAccordingToConfig</a>($fields_values[$fName],$fieldInformation[$fName]); <a name="l00295"></a>00295 } <a name="l00296"></a>00296 <a name="l00297"></a>00297 <span class="comment">// Do query, returns array with keys to the data array of the result:</span> <a name="l00298"></a>00298 $itemKeys = $this-><a class="code" href="classt3lib__sqlengine.html#59c41e8bef5a50b129db2f502ee0779c">selectFromData</a>($table,$where); <a name="l00299"></a>00299 <a name="l00300"></a>00300 <span class="comment">// Set "last affected rows":</span> <a name="l00301"></a>00301 $this->lastAffectedRows = count($itemKeys); <a name="l00302"></a>00302 <a name="l00303"></a>00303 <span class="comment">// Update rows:</span> <a name="l00304"></a>00304 <span class="keywordflow">if</span> ($this->lastAffectedRows) { <a name="l00305"></a>00305 <span class="comment">// Traverse result set here:</span> <a name="l00306"></a>00306 foreach($itemKeys as $dataArrayKey) { <a name="l00307"></a>00307 <a name="l00308"></a>00308 <span class="comment">// Traverse fields to update:</span> <a name="l00309"></a>00309 foreach($fields_values as $fName => $fValue) { <a name="l00310"></a>00310 $this->data[$table][$dataArrayKey][$fName] = $fValue; <a name="l00311"></a>00311 } <a name="l00312"></a>00312 } <a name="l00313"></a>00313 <a name="l00314"></a>00314 <span class="comment">// Save data source</span> <a name="l00315"></a>00315 $this-><a class="code" href="classt3lib__sqlengine.html#db6238001fb99accc1dcaf6a870b0b72">saveDataSource</a>($table); <a name="l00316"></a>00316 } <a name="l00317"></a>00317 <a name="l00318"></a>00318 <span class="keywordflow">return</span> TRUE; <a name="l00319"></a>00319 } <span class="keywordflow">else</span> $this->errorStatus = 'WHERE clause contained errors: '.$where; <a name="l00320"></a>00320 } <span class="keywordflow">else</span> $this->errorStatus = 'No data loaded.'; <a name="l00321"></a>00321 <a name="l00322"></a>00322 <span class="keywordflow">return</span> FALSE; <a name="l00323"></a>00323 } <a name="l00324"></a>00324 <a name="l00332"></a><a class="code" href="classt3lib__sqlengine.html#688c7528b08be8f67675a57f7bccf59f">00332</a> function <a class="code" href="classt3lib__sqlengine.html#688c7528b08be8f67675a57f7bccf59f">exec_DELETEquery</a>($table,$where) { <a name="l00333"></a>00333 <a name="l00334"></a>00334 <span class="comment">// Initialize:</span> <a name="l00335"></a>00335 $this-><a class="code" href="classt3lib__sqlengine.html#25792b0964b3e0cb64ba11431ee22d9e">resetStatusVars</a>(); <a name="l00336"></a>00336 <a name="l00337"></a>00337 <span class="comment">// Reading Data Source if not done already.</span> <a name="l00338"></a>00338 $this-><a class="code" href="classt3lib__sqlengine.html#c97d28fca141ebe201c5eb79cfee8822">readDataSource</a>($table); <a name="l00339"></a>00339 <a name="l00340"></a>00340 <span class="comment">// If anything is there:</span> <a name="l00341"></a>00341 <span class="keywordflow">if</span> (is_array($this->data[$table])) { <a name="l00342"></a>00342 <a name="l00343"></a>00343 <span class="comment">// Parse WHERE clause:</span> <a name="l00344"></a>00344 $where = $this-><a class="code" href="classt3lib__sqlparser.html#150e4f0572e42e372ae92017fbec7279">parseWhereClause</a>($where); <a name="l00345"></a>00345 <a name="l00346"></a>00346 <span class="keywordflow">if</span> (is_array($where)) { <a name="l00347"></a>00347 <a name="l00348"></a>00348 <span class="comment">// Do query, returns array with keys to the data array of the result:</span> <a name="l00349"></a>00349 $itemKeys = $this-><a class="code" href="classt3lib__sqlengine.html#59c41e8bef5a50b129db2f502ee0779c">selectFromData</a>($table,$where); <a name="l00350"></a>00350 <a name="l00351"></a>00351 <span class="comment">// Set "last affected rows":</span> <a name="l00352"></a>00352 $this->lastAffectedRows = count($itemKeys); <a name="l00353"></a>00353 <a name="l00354"></a>00354 <span class="comment">// Remove rows:</span> <a name="l00355"></a>00355 <span class="keywordflow">if</span> ($this->lastAffectedRows) { <a name="l00356"></a>00356 <span class="comment">// Traverse result set:</span> <a name="l00357"></a>00357 foreach($itemKeys as $dataArrayKey) { <a name="l00358"></a>00358 unset($this->data[$table][$dataArrayKey]); <a name="l00359"></a>00359 } <a name="l00360"></a>00360 <a name="l00361"></a>00361 <span class="comment">// Saving data source</span> <a name="l00362"></a>00362 $this-><a class="code" href="classt3lib__sqlengine.html#db6238001fb99accc1dcaf6a870b0b72">saveDataSource</a>($table); <a name="l00363"></a>00363 } <a name="l00364"></a>00364 <a name="l00365"></a>00365 <span class="keywordflow">return</span> TRUE; <a name="l00366"></a>00366 } <span class="keywordflow">else</span> $this->errorStatus = 'WHERE clause contained errors: '.$where; <a name="l00367"></a>00367 } <span class="keywordflow">else</span> $this->errorStatus = 'No data loaded.'; <a name="l00368"></a>00368 <a name="l00369"></a>00369 <span class="keywordflow">return</span> FALSE; <a name="l00370"></a>00370 } <a name="l00371"></a>00371 <a name="l00383"></a><a class="code" href="classt3lib__sqlengine.html#4609df372023da1d40570a7a75304e5e">00383</a> function <a class="code" href="classt3lib__sqlengine.html#4609df372023da1d40570a7a75304e5e">exec_SELECTquery</a>($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit) { <a name="l00384"></a>00384 <a name="l00385"></a>00385 <span class="comment">// Initialize:</span> <a name="l00386"></a>00386 $this-><a class="code" href="classt3lib__sqlengine.html#25792b0964b3e0cb64ba11431ee22d9e">resetStatusVars</a>(); <a name="l00387"></a>00387 <a name="l00388"></a>00388 <span class="comment">// Create result object</span> <a name="l00389"></a>00389 $sqlObj = <a class="code" href="classt3lib__div.html#b47f8a8e8be44b79a0b8064dcd427bc1">t3lib_div::makeInstance</a>('<a class="code" href="classt3lib__sqlengine__resultobj.html">t3lib_sqlengine_resultobj</a>'); <a name="l00390"></a>00390 $sqlObj->result = array(); <span class="comment">// Empty result as a beginning</span> <a name="l00391"></a>00391 <a name="l00392"></a>00392 <span class="comment">// Get table list:</span> <a name="l00393"></a>00393 $tableArray = $this-><a class="code" href="classt3lib__sqlparser.html#fb008468bcb6cff9b5ccd5fa7d670729">parseFromTables</a>($from_table); <a name="l00394"></a>00394 $table = $tableArray[0]['table']; <a name="l00395"></a>00395 <a name="l00396"></a>00396 <span class="comment">// Reading Data Source if not done already.</span> <a name="l00397"></a>00397 $this-><a class="code" href="classt3lib__sqlengine.html#c97d28fca141ebe201c5eb79cfee8822">readDataSource</a>($table); <a name="l00398"></a>00398 <a name="l00399"></a>00399 <span class="comment">// If anything is there:</span> <a name="l00400"></a>00400 <span class="keywordflow">if</span> (is_array($this->data[$table])) { <a name="l00401"></a>00401 <a name="l00402"></a>00402 <span class="comment">// Parse WHERE clause:</span> <a name="l00403"></a>00403 $where = $this-><a class="code" href="classt3lib__sqlparser.html#150e4f0572e42e372ae92017fbec7279">parseWhereClause</a>($where_clause); <a name="l00404"></a>00404 <span class="keywordflow">if</span> (is_array($where)) { <a name="l00405"></a>00405 <a name="l00406"></a>00406 <span class="comment">// Do query, returns array with keys to the data array of the result:</span> <a name="l00407"></a>00407 $itemKeys = $this-><a class="code" href="classt3lib__sqlengine.html#59c41e8bef5a50b129db2f502ee0779c">selectFromData</a>($table,$where); <a name="l00408"></a>00408 <a name="l00409"></a>00409 <span class="comment">// Finally, read the result rows into this variable:</span> <a name="l00410"></a>00410 $sqlObj->result = $this-><a class="code" href="classt3lib__sqlengine.html#fa3fbd903bcfa31b615e2789b72c8459">getResultSet</a>($itemKeys,$table,<span class="charliteral">'*'</span>); <a name="l00411"></a>00411 <span class="comment">// Reset and return result:</span> <a name="l00412"></a>00412 reset($sqlObj->result); <a name="l00413"></a>00413 <span class="keywordflow">return</span> $sqlObj; <a name="l00414"></a>00414 } <span class="keywordflow">else</span> $this->errorStatus = 'WHERE clause contained errors: '.$where; <a name="l00415"></a>00415 } <span class="keywordflow">else</span> $this->errorStatus = 'No data loaded: '.$this->errorStatus; <a name="l00416"></a>00416 <a name="l00417"></a>00417 <span class="keywordflow">return</span> FALSE; <a name="l00418"></a>00418 } <a name="l00419"></a>00419 <a name="l00426"></a><a class="code" href="classt3lib__sqlengine.html#0dfd8639df5d97a00aea9e263b02b660">00426</a> function <a class="code" href="classt3lib__sqlengine.html#0dfd8639df5d97a00aea9e263b02b660">sql_query</a>($query) { <a name="l00427"></a>00427 $res = <a class="code" href="classt3lib__div.html#b47f8a8e8be44b79a0b8064dcd427bc1">t3lib_div::makeInstance</a>('<a class="code" href="classt3lib__sqlengine__resultobj.html">t3lib_sqlengine_resultobj</a>'); <a name="l00428"></a>00428 $res->result = array(); <a name="l00429"></a>00429 <span class="keywordflow">return</span> $res; <a name="l00430"></a>00430 } <a name="l00431"></a>00431 <a name="l00437"></a><a class="code" href="classt3lib__sqlengine.html#264dc8d03b761f3b5c14858e347c6885">00437</a> function <a class="code" href="classt3lib__sqlengine.html#264dc8d03b761f3b5c14858e347c6885">sql_error</a>() { <a name="l00438"></a>00438 <span class="keywordflow">return</span> $this->errorStatus; <a name="l00439"></a>00439 } <a name="l00440"></a>00440 <a name="l00446"></a><a class="code" href="classt3lib__sqlengine.html#f03d0aec7789be116e928b8a7d7d691a">00446</a> function <a class="code" href="classt3lib__sqlengine.html#f03d0aec7789be116e928b8a7d7d691a">sql_insert_id</a>() { <a name="l00447"></a>00447 <span class="keywordflow">return</span> $this->lastInsertedId; <a name="l00448"></a>00448 } <a name="l00449"></a>00449 <a name="l00455"></a><a class="code" href="classt3lib__sqlengine.html#8952fdbaddcc128d8bc7ac2bd62467df">00455</a> function <a class="code" href="classt3lib__sqlengine.html#8952fdbaddcc128d8bc7ac2bd62467df">sql_affected_rows</a>() { <a name="l00456"></a>00456 <span class="keywordflow">return</span> $this->lastAffectedRows; <a name="l00457"></a>00457 } <a name="l00458"></a>00458 <a name="l00465"></a><a class="code" href="classt3lib__sqlengine.html#775d2ee7e1013c1fcc9fe0939386a793">00465</a> function <a class="code" href="classt3lib__sqlengine.html#775d2ee7e1013c1fcc9fe0939386a793">quoteStr</a>($str) { <a name="l00466"></a>00466 <span class="keywordflow">return</span> addslashes($str); <a name="l00467"></a>00467 } <a name="l00468"></a>00468 <a name="l00469"></a>00469 <a name="l00470"></a>00470 <a name="l00471"></a>00471 <a name="l00472"></a>00472 <a name="l00473"></a>00473 <a name="l00474"></a>00474 <a name="l00475"></a>00475 <a name="l00476"></a>00476 <a name="l00477"></a>00477 <a name="l00478"></a>00478 <span class="comment">/**************************************</span> <a name="l00479"></a>00479 <span class="comment"> *</span> <a name="l00480"></a>00480 <span class="comment"> * SQL admin functions</span> <a name="l00481"></a>00481 <span class="comment"> * (For use in the Install Tool and Extension Manager)</span> <a name="l00482"></a>00482 <span class="comment"> *</span> <a name="l00483"></a>00483 <span class="comment"> **************************************/</span> <a name="l00484"></a>00484 <a name="l00490"></a><a class="code" href="classt3lib__sqlengine.html#c93711b61420a3b18c06b4e6d08fea48">00490</a> function <a class="code" href="classt3lib__sqlengine.html#c93711b61420a3b18c06b4e6d08fea48">admin_get_tables</a>() { <a name="l00491"></a>00491 $whichTables = array(); <a name="l00492"></a>00492 <span class="keywordflow">return</span> $whichTables; <a name="l00493"></a>00493 } <a name="l00494"></a>00494 <a name="l00501"></a><a class="code" href="classt3lib__sqlengine.html#ce6301c93f6d72c0574ef57897924559">00501</a> function <a class="code" href="classt3lib__sqlengine.html#ce6301c93f6d72c0574ef57897924559">admin_get_fields</a>($tableName) { <a name="l00502"></a>00502 $output = array(); <a name="l00503"></a>00503 <span class="keywordflow">return</span> $output; <a name="l00504"></a>00504 } <a name="l00505"></a>00505 <a name="l00512"></a><a class="code" href="classt3lib__sqlengine.html#9dbd272bf88a3ec348f6bb06fbbeebe8">00512</a> function <a class="code" href="classt3lib__sqlengine.html#9dbd272bf88a3ec348f6bb06fbbeebe8">admin_get_keys</a>($tableName) { <a name="l00513"></a>00513 $output = array(); <a name="l00514"></a>00514 <span class="keywordflow">return</span> $output; <a name="l00515"></a>00515 } <a name="l00516"></a>00516 <a name="l00523"></a><a class="code" href="classt3lib__sqlengine.html#80b8138c95c6e8d49f9b959aa5973046">00523</a> function <a class="code" href="classt3lib__sqlengine.html#80b8138c95c6e8d49f9b959aa5973046">admin_query</a>($query) { <a name="l00524"></a>00524 <span class="keywordflow">return</span> $this-><a class="code" href="classt3lib__sqlengine.html#0dfd8639df5d97a00aea9e263b02b660">sql_query</a>($query); <a name="l00525"></a>00525 } <a name="l00526"></a>00526 <a name="l00527"></a>00527 <a name="l00528"></a>00528 <a name="l00529"></a>00529 <a name="l00530"></a>00530 <a name="l00531"></a>00531 <a name="l00532"></a>00532 <a name="l00533"></a>00533 <a name="l00534"></a>00534 <span class="comment">/********************************</span> <a name="l00535"></a>00535 <span class="comment"> *</span> <a name="l00536"></a>00536 <span class="comment"> * Data Source I/O</span> <a name="l00537"></a>00537 <span class="comment"> *</span> <a name="l00538"></a>00538 <span class="comment"> ********************************/</span> <a name="l00539"></a>00539 <a name="l00548"></a><a class="code" href="classt3lib__sqlengine.html#c97d28fca141ebe201c5eb79cfee8822">00548</a> function <a class="code" href="classt3lib__sqlengine.html#c97d28fca141ebe201c5eb79cfee8822">readDataSource</a>($table) { <a name="l00549"></a>00549 $this->data[$table] = array(); <a name="l00550"></a>00550 } <a name="l00551"></a>00551 <a name="l00560"></a><a class="code" href="classt3lib__sqlengine.html#db6238001fb99accc1dcaf6a870b0b72">00560</a> function <a class="code" href="classt3lib__sqlengine.html#db6238001fb99accc1dcaf6a870b0b72">saveDataSource</a>($table) { <a name="l00561"></a>00561 debug($this->data[$table]); <a name="l00562"></a>00562 } <a name="l00563"></a>00563 <a name="l00564"></a>00564 <a name="l00565"></a>00565 <a name="l00566"></a>00566 <a name="l00567"></a>00567 <a name="l00568"></a>00568 <a name="l00569"></a>00569 <a name="l00570"></a>00570 <a name="l00571"></a>00571 <a name="l00572"></a>00572 <a name="l00573"></a>00573 <a name="l00574"></a>00574 <a name="l00575"></a>00575 <a name="l00576"></a>00576 <span class="comment">/********************************</span> <a name="l00577"></a>00577 <span class="comment"> *</span> <a name="l00578"></a>00578 <span class="comment"> * SQL engine functions (PHP simulation of SQL) - still experimental</span> <a name="l00579"></a>00579 <span class="comment"> *</span> <a name="l00580"></a>00580 <span class="comment"> ********************************/</span> <a name="l00581"></a>00581 <a name="l00590"></a><a class="code" href="classt3lib__sqlengine.html#59c41e8bef5a50b129db2f502ee0779c">00590</a> function <a class="code" href="classt3lib__sqlengine.html#59c41e8bef5a50b129db2f502ee0779c">selectFromData</a>($table,$where) { <a name="l00591"></a>00591 <a name="l00592"></a>00592 $output = array(); <a name="l00593"></a>00593 <span class="keywordflow">if</span> (is_array($this->data[$table])) { <a name="l00594"></a>00594 <a name="l00595"></a>00595 <span class="comment">// All keys:</span> <a name="l00596"></a>00596 $OR_index = 0; <a name="l00597"></a>00597 <a name="l00598"></a>00598 foreach($where as $config) { <a name="l00599"></a>00599 <a name="l00600"></a>00600 <span class="keywordflow">if</span> (strtoupper($config['<span class="keyword">operator</span>'])=='OR') { <a name="l00601"></a>00601 $OR_index++; <a name="l00602"></a>00602 } <a name="l00603"></a>00603 <a name="l00604"></a>00604 <span class="keywordflow">if</span> (!isset($itemKeys[$OR_index])) $itemKeys[$OR_index] = array_keys($this->data[$table]); <a name="l00605"></a>00605 <a name="l00606"></a>00606 $this-><a class="code" href="classt3lib__sqlengine.html#be9a931b94743abaa55d9e6c89fa9f1e">select_evalSingle</a>($table,$config,$itemKeys[$OR_index]); <a name="l00607"></a>00607 } <a name="l00608"></a>00608 <a name="l00609"></a>00609 foreach($itemKeys as $uidKeys) { <a name="l00610"></a>00610 $output = array_merge($output, $uidKeys); <a name="l00611"></a>00611 } <a name="l00612"></a>00612 $output = array_unique($output); <a name="l00613"></a>00613 } <a name="l00614"></a>00614 <a name="l00615"></a>00615 <span class="keywordflow">return</span> $output; <a name="l00616"></a>00616 } <a name="l00617"></a>00617 <a name="l00628"></a><a class="code" href="classt3lib__sqlengine.html#be9a931b94743abaa55d9e6c89fa9f1e">00628</a> function <a class="code" href="classt3lib__sqlengine.html#be9a931b94743abaa55d9e6c89fa9f1e">select_evalSingle</a>($table,$config,&$itemKeys) { <a name="l00629"></a>00629 $neg = preg_match('/^AND[[:space:]]+NOT$/',trim($config['<span class="keyword">operator</span>'])); <a name="l00630"></a>00630 <a name="l00631"></a>00631 <span class="keywordflow">if</span> (is_array($config['sub'])) { <a name="l00632"></a>00632 $subSelKeys = $this-><a class="code" href="classt3lib__sqlengine.html#59c41e8bef5a50b129db2f502ee0779c">selectFromData</a>($table,$config['sub']); <a name="l00633"></a>00633 <span class="keywordflow">if</span> ($neg) { <a name="l00634"></a>00634 foreach($itemKeys as $kk => $vv) { <a name="l00635"></a>00635 <span class="keywordflow">if</span> (in_array($vv,$subSelKeys)) { <a name="l00636"></a>00636 unset($itemKeys[$kk]); <a name="l00637"></a>00637 } <a name="l00638"></a>00638 } <a name="l00639"></a>00639 } <span class="keywordflow">else</span> { <a name="l00640"></a>00640 $itemKeys = array_intersect($itemKeys, $subSelKeys); <a name="l00641"></a>00641 } <a name="l00642"></a>00642 } <span class="keywordflow">else</span> { <a name="l00643"></a>00643 $comp = strtoupper(str_replace(array(<span class="charliteral">' '</span>,<span class="stringliteral">"\t"</span>,<span class="stringliteral">"\r"</span>,<span class="stringliteral">"\n"</span>),'',$config['comparator'])); <a name="l00644"></a>00644 $mod = strtoupper($config['modifier']); <a name="l00645"></a>00645 <span class="keywordflow">switch</span>($comp) { <a name="l00646"></a>00646 <span class="keywordflow">case</span> 'NOTLIKE': <a name="l00647"></a>00647 <span class="keywordflow">case</span> 'LIKE': <a name="l00648"></a>00648 $like_value = strtolower($config['value'][0]); <a name="l00649"></a>00649 <span class="keywordflow">if</span> (substr($like_value,0,1)==<span class="charliteral">'%'</span>) { <a name="l00650"></a>00650 $wildCard_begin = TRUE; <a name="l00651"></a>00651 $like_value = substr($like_value,1); <a name="l00652"></a>00652 } <a name="l00653"></a>00653 <span class="keywordflow">if</span> (substr($like_value,-1)==<span class="charliteral">'%'</span>) { <a name="l00654"></a>00654 $wildCard_end = TRUE; <a name="l00655"></a>00655 $like_value = substr($like_value,0,-1); <a name="l00656"></a>00656 } <a name="l00657"></a>00657 <span class="keywordflow">break</span>; <a name="l00658"></a>00658 <span class="keywordflow">case</span> 'NOTIN': <a name="l00659"></a>00659 <span class="keywordflow">case</span> 'IN': <a name="l00660"></a>00660 $in_valueArray = array(); <a name="l00661"></a>00661 foreach($config['value'] as $vParts) { <a name="l00662"></a>00662 $in_valueArray[] = (string)$vParts[0]; <a name="l00663"></a>00663 } <a name="l00664"></a>00664 <span class="keywordflow">break</span>; <a name="l00665"></a>00665 } <a name="l00666"></a>00666 <a name="l00667"></a>00667 foreach($itemKeys as $kk => $v) { <a name="l00668"></a>00668 $field_value = $this->data[$table][$v][$config['field']]; <a name="l00669"></a>00669 <a name="l00670"></a>00670 <span class="comment">// Calculate it:</span> <a name="l00671"></a>00671 <span class="keywordflow">if</span> ($config['calc']==<span class="charliteral">'&'</span>) { <a name="l00672"></a>00672 $field_value&=intval($config['calc_value']); <a name="l00673"></a>00673 } <a name="l00674"></a>00674 <a name="l00675"></a>00675 <span class="comment">// Compare it:</span> <a name="l00676"></a>00676 <span class="keywordflow">switch</span>($comp) { <a name="l00677"></a>00677 <span class="keywordflow">case</span> '<=': <a name="l00678"></a>00678 $bool = $field_value <= $config['value'][0]; <a name="l00679"></a>00679 <span class="keywordflow">break</span>; <a name="l00680"></a>00680 <span class="keywordflow">case</span> '>=': <a name="l00681"></a>00681 $bool = $field_value >= $config['value'][0]; <a name="l00682"></a>00682 <span class="keywordflow">break</span>; <a name="l00683"></a>00683 <span class="keywordflow">case</span> <span class="charliteral">'<'</span>: <a name="l00684"></a>00684 $bool = $field_value < $config['value'][0]; <a name="l00685"></a>00685 <span class="keywordflow">break</span>; <a name="l00686"></a>00686 <span class="keywordflow">case</span> <span class="charliteral">'>'</span>: <a name="l00687"></a>00687 $bool = $field_value > $config['value'][0]; <a name="l00688"></a>00688 <span class="keywordflow">break</span>; <a name="l00689"></a>00689 <span class="keywordflow">case</span> <span class="charliteral">'='</span>: <a name="l00690"></a>00690 $bool = !strcmp($field_value,$config['value'][0]); <a name="l00691"></a>00691 <span class="keywordflow">break</span>; <a name="l00692"></a>00692 <span class="keywordflow">case</span> '!=': <a name="l00693"></a>00693 $bool = strcmp($field_value,$config['value'][0]); <a name="l00694"></a>00694 <span class="keywordflow">break</span>; <a name="l00695"></a>00695 <span class="keywordflow">case</span> 'NOTIN': <a name="l00696"></a>00696 <span class="keywordflow">case</span> 'IN': <a name="l00697"></a>00697 $bool = in_array((string)$field_value, $in_valueArray); <a name="l00698"></a>00698 <span class="keywordflow">if</span> ($comp=='NOTIN') $bool = !$bool; <a name="l00699"></a>00699 <span class="keywordflow">break</span>; <a name="l00700"></a>00700 <span class="keywordflow">case</span> 'NOTLIKE': <a name="l00701"></a>00701 <span class="keywordflow">case</span> 'LIKE': <a name="l00702"></a>00702 <span class="keywordflow">if</span> (!strlen($like_value)) { <a name="l00703"></a>00703 $bool = TRUE; <a name="l00704"></a>00704 } elseif ($wildCard_begin && !$wildCard_end) { <a name="l00705"></a>00705 $bool = !strcmp(substr(strtolower($field_value),-strlen($like_value)),$like_value); <a name="l00706"></a>00706 } elseif (!$wildCard_begin && $wildCard_end) { <a name="l00707"></a>00707 $bool = !strcmp(substr(strtolower($field_value),0,strlen($like_value)),$like_value); <a name="l00708"></a>00708 } elseif ($wildCard_begin && $wildCard_end) { <a name="l00709"></a>00709 $bool = strstr($field_value,$like_value); <a name="l00710"></a>00710 } <span class="keywordflow">else</span> { <a name="l00711"></a>00711 $bool = !strcmp(strtolower($field_value),$like_value); <a name="l00712"></a>00712 } <a name="l00713"></a>00713 <span class="keywordflow">if</span> ($comp=='NOTLIKE') $bool = !$bool; <a name="l00714"></a>00714 <span class="keywordflow">break</span>; <a name="l00715"></a>00715 <span class="keywordflow">default</span>: <a name="l00716"></a>00716 $bool = $field_value ? TRUE : FALSE; <a name="l00717"></a>00717 <span class="keywordflow">break</span>; <a name="l00718"></a>00718 } <a name="l00719"></a>00719 <a name="l00720"></a>00720 <span class="comment">// General negation:</span> <a name="l00721"></a>00721 <span class="keywordflow">if</span> ($neg) $bool = !$bool; <a name="l00722"></a>00722 <a name="l00723"></a>00723 <span class="comment">// Modify?</span> <a name="l00724"></a>00724 <span class="keywordflow">switch</span>($mod) { <a name="l00725"></a>00725 <span class="keywordflow">case</span> 'NOT': <a name="l00726"></a>00726 <span class="keywordflow">case</span> <span class="charliteral">'!'</span>: <a name="l00727"></a>00727 $bool = !$bool; <a name="l00728"></a>00728 <span class="keywordflow">break</span>; <a name="l00729"></a>00729 } <a name="l00730"></a>00730 <a name="l00731"></a>00731 <span class="comment">// Action:</span> <a name="l00732"></a>00732 <span class="keywordflow">if</span> (!$bool) { <a name="l00733"></a>00733 unset($itemKeys[$kk]); <a name="l00734"></a>00734 } <a name="l00735"></a>00735 } <a name="l00736"></a>00736 } <a name="l00737"></a>00737 } <a name="l00738"></a>00738 <a name="l00747"></a><a class="code" href="classt3lib__sqlengine.html#fa3fbd903bcfa31b615e2789b72c8459">00747</a> function <a class="code" href="classt3lib__sqlengine.html#fa3fbd903bcfa31b615e2789b72c8459">getResultSet</a>($keys, $table, $fieldList) { <a name="l00748"></a>00748 $fields = <a class="code" href="classt3lib__div.html#cfb87d585b85e9b32841bde40beaa96c">t3lib_div::trimExplode</a>(<span class="charliteral">','</span>,$fieldList); <a name="l00749"></a>00749 <a name="l00750"></a>00750 $output = array(); <a name="l00751"></a>00751 foreach($keys as $kValue) { <a name="l00752"></a>00752 <span class="keywordflow">if</span> ($fieldList==<span class="charliteral">'*'</span>) { <a name="l00753"></a>00753 $output[$kValue] = $this->data[$table][$kValue]; <a name="l00754"></a>00754 } <span class="keywordflow">else</span> { <a name="l00755"></a>00755 foreach($fields as $fieldName) { <a name="l00756"></a>00756 $output[$kValue][$fieldName] = $this->data[$table][$kValue][$fieldName]; <a name="l00757"></a>00757 } <a name="l00758"></a>00758 } <a name="l00759"></a>00759 } <a name="l00760"></a>00760 <a name="l00761"></a>00761 <span class="keywordflow">return</span> $output; <a name="l00762"></a>00762 } <a name="l00763"></a>00763 <a name="l00764"></a>00764 <a name="l00765"></a>00765 <a name="l00766"></a>00766 <a name="l00767"></a>00767 <a name="l00768"></a>00768 <a name="l00769"></a>00769 <a name="l00770"></a>00770 <a name="l00771"></a>00771 <a name="l00772"></a>00772 <a name="l00773"></a>00773 <a name="l00774"></a>00774 <a name="l00775"></a>00775 <a name="l00776"></a>00776 <a name="l00777"></a>00777 <a name="l00778"></a>00778 <span class="comment">/*************************</span> <a name="l00779"></a>00779 <span class="comment"> *</span> <a name="l00780"></a>00780 <span class="comment"> * Debugging</span> <a name="l00781"></a>00781 <span class="comment"> *</span> <a name="l00782"></a>00782 <span class="comment"> *************************/</span> <a name="l00783"></a>00783 <a name="l00790"></a><a class="code" href="classt3lib__sqlengine.html#e266f7fae61b3987358faa48b11b27b4">00790</a> function <a class="code" href="classt3lib__sqlengine.html#e266f7fae61b3987358faa48b11b27b4">debug_printResultSet</a>($array) { <a name="l00791"></a>00791 <a name="l00792"></a>00792 <span class="keywordflow">if</span> (count($array)) { <a name="l00793"></a>00793 $tRows=array(); <a name="l00794"></a>00794 $fields = array_keys(current($array)); <a name="l00795"></a>00795 $tCell[]=' <a name="l00796"></a>00796 <td>IDX</td>'; <a name="l00797"></a>00797 foreach($fields as $fieldName) { <a name="l00798"></a>00798 $tCell[]=' <a name="l00799"></a>00799 <td>'.htmlspecialchars($fieldName).'</td>'; <a name="l00800"></a>00800 } <a name="l00801"></a>00801 $tRows[]='<tr>'.implode('',$tCell).'</tr>'; <a name="l00802"></a>00802 <a name="l00803"></a>00803 <a name="l00804"></a>00804 foreach($array as $index => $rec) { <a name="l00805"></a>00805 <a name="l00806"></a>00806 $tCell=array(); <a name="l00807"></a>00807 $tCell[]=' <a name="l00808"></a>00808 <td>'.htmlspecialchars($index).'</td>'; <a name="l00809"></a>00809 foreach($fields as $fieldName) { <a name="l00810"></a>00810 $tCell[]=' <a name="l00811"></a>00811 <td>'.htmlspecialchars($rec[$fieldName]).'</td>'; <a name="l00812"></a>00812 } <a name="l00813"></a>00813 $tRows[]='<tr>'.implode('',$tCell).'</tr>'; <a name="l00814"></a>00814 } <a name="l00815"></a>00815 <a name="l00816"></a>00816 <span class="keywordflow">return</span> '<table border=<span class="stringliteral">"1"</span>>'.implode('',$tRows).'</table>'; <a name="l00817"></a>00817 } <span class="keywordflow">else</span> 'Empty resultset'; <a name="l00818"></a>00818 } <a name="l00819"></a>00819 } <a name="l00820"></a>00820 <a name="l00821"></a>00821 <a name="l00829"></a><a class="code" href="classt3lib__sqlengine__resultobj.html">00829</a> <span class="keyword">class </span><a class="code" href="classt3lib__sqlengine__resultobj.html">t3lib_sqlengine_resultobj</a> { <a name="l00830"></a>00830 <a name="l00831"></a>00831 <span class="comment">// Result array, must contain the fields in the order they were selected in the SQL statement (for sql_fetch_row())</span> <a name="l00832"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#fc0da4fe53c1324cc4c3d9726f1003d6">00832</a> var <a class="code" href="classt3lib__sqlengine__resultobj.html#fc0da4fe53c1324cc4c3d9726f1003d6">$result</a> = array(); <a name="l00833"></a>00833 <a name="l00834"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#8c1a5c900baa778f704f4ea1d4fb8b3b">00834</a> var <a class="code" href="classt3lib__sqlengine__resultobj.html#8c1a5c900baa778f704f4ea1d4fb8b3b">$TYPO3_DBAL_handlerType</a> = ''; <a name="l00835"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#c4b95cdefc354d9a6987e36fd47ceff5">00835</a> var <a class="code" href="classt3lib__sqlengine__resultobj.html#c4b95cdefc354d9a6987e36fd47ceff5">$TYPO3_DBAL_tableList</a> = ''; <a name="l00836"></a>00836 <a name="l00837"></a>00837 <a name="l00843"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#84cbf9fcf03b66c8d69064b2d1b4af08">00843</a> function <a class="code" href="classt3lib__sqlengine__resultobj.html#84cbf9fcf03b66c8d69064b2d1b4af08">sql_num_rows</a>() { <a name="l00844"></a>00844 <span class="keywordflow">return</span> count($this->result); <a name="l00845"></a>00845 } <a name="l00846"></a>00846 <a name="l00852"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#600eb176952db6323ae7229f089a70de">00852</a> function <a class="code" href="classt3lib__sqlengine__resultobj.html#600eb176952db6323ae7229f089a70de">sql_fetch_assoc</a>() { <a name="l00853"></a>00853 $row = current($this->result); <a name="l00854"></a>00854 next($this->result); <a name="l00855"></a>00855 <span class="keywordflow">return</span> $row; <a name="l00856"></a>00856 } <a name="l00857"></a>00857 <a name="l00863"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#cc536da03a39ac93be87a874aa45a8b0">00863</a> function <a class="code" href="classt3lib__sqlengine__resultobj.html#cc536da03a39ac93be87a874aa45a8b0">sql_fetch_row</a>() { <a name="l00864"></a>00864 $resultRow = $this-><a class="code" href="classt3lib__sqlengine__resultobj.html#600eb176952db6323ae7229f089a70de">sql_fetch_assoc</a>(); <a name="l00865"></a>00865 <a name="l00866"></a>00866 <span class="keywordflow">if</span> (is_array($resultRow)) { <a name="l00867"></a>00867 $numArray = array(); <a name="l00868"></a>00868 foreach($resultRow as $value) { <a name="l00869"></a>00869 $numArray[]=$value; <a name="l00870"></a>00870 } <a name="l00871"></a>00871 <span class="keywordflow">return</span> $numArray; <a name="l00872"></a>00872 } <a name="l00873"></a>00873 } <a name="l00874"></a>00874 <a name="l00881"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#6c19f0966abc2f3b5e74181588ace089">00881</a> function <a class="code" href="classt3lib__sqlengine__resultobj.html#6c19f0966abc2f3b5e74181588ace089">sql_data_seek</a>($pointer) { <a name="l00882"></a>00882 reset($this->result); <a name="l00883"></a>00883 <span class="keywordflow">for</span> ($a=0;$a<$pointer;$a++) { <a name="l00884"></a>00884 next($this->result); <a name="l00885"></a>00885 } <a name="l00886"></a>00886 <span class="keywordflow">return</span> TRUE; <a name="l00887"></a>00887 } <a name="l00888"></a>00888 <a name="l00894"></a><a class="code" href="classt3lib__sqlengine__resultobj.html#3b14a22633d11345c4011ede159742d7">00894</a> function sql_field_type() { <a name="l00895"></a>00895 <span class="keywordflow">return</span> ''; <a name="l00896"></a>00896 } <a name="l00897"></a>00897 } <a name="l00898"></a>00898 <a name="l00899"></a>00899 <a name="l00900"></a>00900 <a name="l00901"></a>00901 <span class="keywordflow">if</span> (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/<span class="keyword">class</span>.<a class="code" href="classt3lib__sqlengine.html">t3lib_sqlengine</a>.php']) { <a name="l00902"></a>00902 include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/<span class="keyword">class</span>.<a class="code" href="classt3lib__sqlengine.html">t3lib_sqlengine</a>.php']); <a name="l00903"></a>00903 } <a name="l00904"></a>00904 ?> </pre></div><?php include_once '../doc-typo3-funcs.php'; get_footer(); ?>