<?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&nbsp;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&nbsp;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>&nbsp;<u>S</u>earch&nbsp;for&nbsp;</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>&nbsp;&raquo&nbsp;<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 &lt;?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, &amp;$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-&gt;errorStatus = '';
<a name="l00136"></a>00136                 $this-&gt;lastInsertedId = 0;
<a name="l00137"></a>00137                 $this-&gt;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>(&amp;$value,$fInfo)       {
<a name="l00151"></a>00151                 $options = $this-&gt;<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-&gt;<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-&gt;<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-&gt;data[$table]))      {
<a name="l00215"></a>00215 
<a name="l00216"></a>00216                         $fieldInformation = $this-&gt;<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-&gt;<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-&gt;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-&gt;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-&gt;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-&gt;<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-&gt;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-&gt;<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-&gt;<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-&gt;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-&gt;<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-&gt;<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 =&gt; $fValue)    {
<a name="l00294"></a>00294                                         $this-&gt;<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-&gt;<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-&gt;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-&gt;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 =&gt; $fValue)    {
<a name="l00310"></a>00310                                                         $this-&gt;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-&gt;<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-&gt;errorStatus = 'WHERE clause contained errors: '.$where;
<a name="l00320"></a>00320                 } <span class="keywordflow">else</span> $this-&gt;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-&gt;<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-&gt;<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-&gt;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-&gt;<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-&gt;<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-&gt;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-&gt;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-&gt;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-&gt;<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-&gt;errorStatus = 'WHERE clause contained errors: '.$where;
<a name="l00367"></a>00367                 } <span class="keywordflow">else</span> $this-&gt;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-&gt;<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-&gt;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-&gt;<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-&gt;<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-&gt;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-&gt;<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-&gt;<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-&gt;result = $this-&gt;<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-&gt;result);
<a name="l00413"></a>00413                                 <span class="keywordflow">return</span> $sqlObj;
<a name="l00414"></a>00414                         } <span class="keywordflow">else</span> $this-&gt;errorStatus = 'WHERE clause contained errors: '.$where;
<a name="l00415"></a>00415                 }  <span class="keywordflow">else</span> $this-&gt;errorStatus = 'No data loaded: '.$this-&gt;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-&gt;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-&gt;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-&gt;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-&gt;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-&gt;<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-&gt;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-&gt;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-&gt;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-&gt;data[$table]);
<a name="l00605"></a>00605 
<a name="l00606"></a>00606                                 $this-&gt;<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,&amp;$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-&gt;<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 =&gt; $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 =&gt; $v) {
<a name="l00668"></a>00668                                 $field_value = $this-&gt;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">'&amp;'</span>)       {
<a name="l00672"></a>00672                                         $field_value&amp;=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> '&lt;=':
<a name="l00678"></a>00678                                                 $bool = $field_value &lt;= $config['value'][0];
<a name="l00679"></a>00679                                         <span class="keywordflow">break</span>;
<a name="l00680"></a>00680                                         <span class="keywordflow">case</span> '&gt;=':
<a name="l00681"></a>00681                                                 $bool = $field_value &gt;= $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">'&lt;'</span>:
<a name="l00684"></a>00684                                                 $bool = $field_value &lt; $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">'&gt;'</span>:
<a name="l00687"></a>00687                                                 $bool = $field_value &gt; $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 &amp;&amp; !$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 &amp;&amp; $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 &amp;&amp; $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-&gt;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-&gt;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                                                         &lt;td&gt;IDX&lt;/td&gt;';
<a name="l00797"></a>00797                                 foreach($fields as $fieldName)  {
<a name="l00798"></a>00798                                         $tCell[]='
<a name="l00799"></a>00799                                                         &lt;td&gt;'.htmlspecialchars($fieldName).'&lt;/td&gt;';
<a name="l00800"></a>00800                                 }
<a name="l00801"></a>00801                                 $tRows[]='&lt;tr&gt;'.implode('',$tCell).'&lt;/tr&gt;';
<a name="l00802"></a>00802 
<a name="l00803"></a>00803 
<a name="l00804"></a>00804                         foreach($array as $index =&gt; $rec)       {
<a name="l00805"></a>00805 
<a name="l00806"></a>00806                                 $tCell=array();
<a name="l00807"></a>00807                                 $tCell[]='
<a name="l00808"></a>00808                                                 &lt;td&gt;'.htmlspecialchars($index).'&lt;/td&gt;';
<a name="l00809"></a>00809                                 foreach($fields as $fieldName)  {
<a name="l00810"></a>00810                                         $tCell[]='
<a name="l00811"></a>00811                                                         &lt;td&gt;'.htmlspecialchars($rec[$fieldName]).'&lt;/td&gt;';
<a name="l00812"></a>00812                                 }
<a name="l00813"></a>00813                                 $tRows[]='&lt;tr&gt;'.implode('',$tCell).'&lt;/tr&gt;';
<a name="l00814"></a>00814                         }
<a name="l00815"></a>00815 
<a name="l00816"></a>00816                         <span class="keywordflow">return</span> '&lt;table border=<span class="stringliteral">"1"</span>&gt;'.implode('',$tRows).'&lt;/table&gt;';
<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-&gt;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-&gt;result);
<a name="l00854"></a>00854                 next($this-&gt;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-&gt;<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-&gt;result);
<a name="l00883"></a>00883                 <span class="keywordflow">for</span> ($a=0;$a&lt;$pointer;$a++)     {
<a name="l00884"></a>00884                         next($this-&gt;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') &amp;&amp; $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 ?&gt;
</pre></div><?php
  include_once '../doc-typo3-funcs.php';
  get_footer();
?>