<?php
  include_once '../doc-typo3-funcs.php';
  $doxygen_vars = array(	"title" => "TYPO3 4.0.1: typo3_src-4.0.1/typo3/sysext/adodb/adodb/drivers/adodb-odbc.inc.php Source File",
				"datetime" => "Sat Dec 2 19:22:26 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_18071ae4545d8b3e0364d30c0659c74a.html">typo3</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_57bf1ed8249c1fd5b014486d01bcb27a.html">sysext</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_e81b1679233d44b74aed493d6fe8e943.html">adodb</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_1f526b87ad011e46f671ba6e798564e1.html">adodb</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_1e0b3ded0d6f913dc09ca6aa6ebd4980.html">drivers</a></div>
<h1>adodb-odbc.inc.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">V4.90 8 June 2006  (c) 2000-2006 John Lim (jlim#natsoft.com.my). All rights reserved.</span>
<a name="l00004"></a>00004 <span class="comment">  Released under both BSD license and Lesser GPL library license. </span>
<a name="l00005"></a>00005 <span class="comment">  Whenever there is any discrepancy between the two licenses, </span>
<a name="l00006"></a>00006 <span class="comment">  the BSD license will take precedence. </span>
<a name="l00007"></a>00007 <span class="comment">Set tabs to 4 for best viewing.</span>
<a name="l00008"></a>00008 <span class="comment">  </span>
<a name="l00009"></a>00009 <span class="comment">  Latest version is available at http://adodb.sourceforge.net</span>
<a name="l00010"></a>00010 <span class="comment">  </span>
<a name="l00011"></a>00011 <span class="comment">  Requires ODBC. Works on Windows and Unix.</span>
<a name="l00012"></a>00012 <span class="comment">*/</span>
<a name="l00013"></a>00013 <span class="comment">// security - hide paths</span>
<a name="l00014"></a>00014 <span class="keywordflow">if</span> (!defined('ADODB_DIR')) die();
<a name="l00015"></a>00015 
<a name="l00016"></a>00016   define(<span class="stringliteral">"_ADODB_ODBC_LAYER"</span>, 2 );
<a name="l00017"></a>00017          
<a name="l00018"></a>00018 <span class="comment">/*--------------------------------------------------------------------------------------</span>
<a name="l00019"></a>00019 <span class="comment">--------------------------------------------------------------------------------------*/</span>
<a name="l00020"></a>00020 
<a name="l00021"></a>00021 
<a name="l00022"></a><a class="code" href="classADODB__odbc.html">00022</a> <span class="keyword">class </span><a class="code" href="classADODB__odbc.html">ADODB_odbc</a> <span class="keyword">extends</span> <a class="code" href="classADOConnection.html">ADOConnection</a> {
<a name="l00023"></a><a class="code" href="classADODB__odbc.html#fe5cb728a1c69ec2d4d8b3906d92a040">00023</a>         var <a class="code" href="classADODB__odbc.html#fe5cb728a1c69ec2d4d8b3906d92a040">$databaseType</a> = <span class="stringliteral">"odbc"</span>;     
<a name="l00024"></a><a class="code" href="classADODB__odbc.html#c2483d66697cd65279154272cf10ed1a">00024</a>         var <a class="code" href="classADODB__odbc.html#c2483d66697cd65279154272cf10ed1a">$fmtDate</a> = <span class="stringliteral">"'Y-m-d'"</span>;
<a name="l00025"></a><a class="code" href="classADODB__odbc.html#87f4706cc2734fcb5e71208aaae3c234">00025</a>         var <a class="code" href="classADODB__odbc.html#87f4706cc2734fcb5e71208aaae3c234">$fmtTimeStamp</a> = <span class="stringliteral">"'Y-m-d, h:i:sA'"</span>;
<a name="l00026"></a><a class="code" href="classADODB__odbc.html#f8aef249979ecb09435a6c7e4b27bf35">00026</a>         var <a class="code" href="classADODB__odbc.html#f8aef249979ecb09435a6c7e4b27bf35">$replaceQuote</a> = <span class="stringliteral">"''"</span>; <span class="comment">// string to use to replace quotes</span>
<a name="l00027"></a><a class="code" href="classADODB__odbc.html#31f8687019ef77395b57020021db6ef6">00027</a>         var <a class="code" href="classADODB__odbc.html#31f8687019ef77395b57020021db6ef6">$dataProvider</a> = <span class="stringliteral">"odbc"</span>;
<a name="l00028"></a><a class="code" href="classADODB__odbc.html#0835da348b29a18fa4e01f3bcd9de775">00028</a>         var <a class="code" href="classADODB__odbc.html#0835da348b29a18fa4e01f3bcd9de775">$hasAffectedRows</a> = <span class="keyword">true</span>;
<a name="l00029"></a><a class="code" href="classADODB__odbc.html#01d30c7213ed1b55503ab867f4bca4ff">00029</a>         var <a class="code" href="classADODB__odbc.html#01d30c7213ed1b55503ab867f4bca4ff">$binmode</a> = ODBC_BINMODE_RETURN;
<a name="l00030"></a><a class="code" href="classADODB__odbc.html#cd5af76448228dbee1eb33d600d74592">00030</a>         var <a class="code" href="classADODB__odbc.html#cd5af76448228dbee1eb33d600d74592">$useFetchArray</a> = <span class="keyword">false</span>; <span class="comment">// setting this to true will make array elements in FETCH_ASSOC mode case-sensitive</span>
<a name="l00031"></a>00031                                                                 <span class="comment">// breaking backward-compat</span>
<a name="l00032"></a>00032         <span class="comment">//var $longreadlen = 8000; // default number of chars to return for a Blob/Long field</span>
<a name="l00033"></a><a class="code" href="classADODB__odbc.html#17a3261e0cc5c33a4ddd79e45ae633b1">00033</a>         var <a class="code" href="classADODB__odbc.html#17a3261e0cc5c33a4ddd79e45ae633b1">$_bindInputArray</a> = <span class="keyword">false</span>;   
<a name="l00034"></a><a class="code" href="classADODB__odbc.html#08ab22e41260548068bcc96a405e0eda">00034</a>         var <a class="code" href="classADODB__odbc.html#08ab22e41260548068bcc96a405e0eda">$curmode</a> = SQL_CUR_USE_DRIVER; <span class="comment">// See sqlext.h, SQL_CUR_DEFAULT == SQL_CUR_USE_DRIVER == 2L</span>
<a name="l00035"></a><a class="code" href="classADODB__odbc.html#4c2e0aebd9b1547d8c91d9a7bea86e90">00035</a>         var <a class="code" href="classADODB__odbc.html#4c2e0aebd9b1547d8c91d9a7bea86e90">$_genSeqSQL</a> = <span class="stringliteral">"create table %s (id integer)"</span>;
<a name="l00036"></a><a class="code" href="classADODB__odbc.html#b4cca2e67c1c9668a8bbcc65795a1f10">00036</a>         var <a class="code" href="classADODB__odbc.html#b4cca2e67c1c9668a8bbcc65795a1f10">$_autocommit</a> = <span class="keyword">true</span>;
<a name="l00037"></a><a class="code" href="classADODB__odbc.html#2f05ce74834366ab0832f7cdbc1ad8e2">00037</a>         var <a class="code" href="classADODB__odbc.html#2f05ce74834366ab0832f7cdbc1ad8e2">$_haserrorfunctions</a> = <span class="keyword">true</span>;
<a name="l00038"></a><a class="code" href="classADODB__odbc.html#57f15809d9052c1d65e0fe1676696e07">00038</a>         var <a class="code" href="classADODB__odbc.html#57f15809d9052c1d65e0fe1676696e07">$_has_stupid_odbc_fetch_api_change</a> = <span class="keyword">true</span>;
<a name="l00039"></a><a class="code" href="classADODB__odbc.html#05952f8e162f797a05f6eebfeb97ccb5">00039</a>         var <a class="code" href="classADODB__odbc.html#05952f8e162f797a05f6eebfeb97ccb5">$_lastAffectedRows</a> = 0;
<a name="l00040"></a><a class="code" href="classADODB__odbc.html#77a7a054fb2e824357669f31e24d8633">00040</a>         var <a class="code" href="classADODB__odbc.html#77a7a054fb2e824357669f31e24d8633">$uCaseTables</a> = <span class="keyword">true</span>; <span class="comment">// for meta* functions, uppercase table names</span>
<a name="l00041"></a>00041         
<a name="l00042"></a><a class="code" href="classADODB__odbc.html#20d0ce3eb3d0ea050a8da318aa2b7460">00042</a>         function <a class="code" href="classADODB__odbc.html#20d0ce3eb3d0ea050a8da318aa2b7460">ADODB_odbc</a>() 
<a name="l00043"></a>00043         {       
<a name="l00044"></a>00044                 $this-&gt;_haserrorfunctions = ADODB_PHPVER &gt;= 0x4050;
<a name="l00045"></a>00045                 $this-&gt;_has_stupid_odbc_fetch_api_change = ADODB_PHPVER &gt;= 0x4200;
<a name="l00046"></a>00046         }
<a name="l00047"></a>00047         
<a name="l00048"></a>00048                 <span class="comment">// returns true or false</span>
<a name="l00049"></a><a class="code" href="classADODB__odbc.html#b0c7a1be75dc0b16354026c20ea618a3">00049</a>         function <a class="code" href="classADODB__odbc.html#b0c7a1be75dc0b16354026c20ea618a3">_connect</a>($argDSN, $argUsername, $argPassword, $argDatabasename)
<a name="l00050"></a>00050         {
<a name="l00051"></a>00051         global $php_errormsg;
<a name="l00052"></a>00052                 
<a name="l00053"></a>00053                 <span class="keywordflow">if</span> (!function_exists('odbc_connect')) <span class="keywordflow">return</span> null;
<a name="l00054"></a>00054                 
<a name="l00055"></a>00055                 <span class="keywordflow">if</span> ($this-&gt;debug &amp;&amp; $argDatabasename &amp;&amp; $this-&gt;databaseType != 'vfp') {
<a name="l00056"></a>00056                         <a class="code" href="classADOConnection.html#4795dfab4c8ca2f1fa2499e22e974d9c">ADOConnection::outp</a>(<span class="stringliteral">"For odbc Connect(), $argDatabasename is not used. Place dsn in 1st parameter."</span>);
<a name="l00057"></a>00057                 }
<a name="l00058"></a>00058                 <span class="keywordflow">if</span> (isset($php_errormsg)) $php_errormsg = '';
<a name="l00059"></a>00059                 <span class="keywordflow">if</span> ($this-&gt;curmode === <span class="keyword">false</span>) $this-&gt;_connectionID = odbc_connect($argDSN,$argUsername,$argPassword);
<a name="l00060"></a>00060                 <span class="keywordflow">else</span> $this-&gt;_connectionID = odbc_connect($argDSN,$argUsername,$argPassword,$this-&gt;curmode);
<a name="l00061"></a>00061                 $this-&gt;_errorMsg = isset($php_errormsg) ? $php_errormsg : '';
<a name="l00062"></a>00062                 <span class="keywordflow">if</span> (isset($this-&gt;connectStmt)) $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>($this-&gt;connectStmt);
<a name="l00063"></a>00063                 
<a name="l00064"></a>00064                 <span class="keywordflow">return</span> $this-&gt;_connectionID != <span class="keyword">false</span>;
<a name="l00065"></a>00065         }
<a name="l00066"></a>00066         
<a name="l00067"></a>00067         <span class="comment">// returns true or false</span>
<a name="l00068"></a><a class="code" href="classADODB__odbc.html#572012ad0f02b46a1da564bd524a1454">00068</a>         function <a class="code" href="classADODB__odbc.html#572012ad0f02b46a1da564bd524a1454">_pconnect</a>($argDSN, $argUsername, $argPassword, $argDatabasename)
<a name="l00069"></a>00069         {
<a name="l00070"></a>00070         global $php_errormsg;
<a name="l00071"></a>00071         
<a name="l00072"></a>00072                 <span class="keywordflow">if</span> (!function_exists('odbc_connect')) <span class="keywordflow">return</span> null;
<a name="l00073"></a>00073                 
<a name="l00074"></a>00074                 <span class="keywordflow">if</span> (isset($php_errormsg)) $php_errormsg = '';
<a name="l00075"></a>00075                 $this-&gt;_errorMsg = isset($php_errormsg) ? $php_errormsg : '';
<a name="l00076"></a>00076                 <span class="keywordflow">if</span> ($this-&gt;debug &amp;&amp; $argDatabasename) {
<a name="l00077"></a>00077                         <a class="code" href="classADOConnection.html#4795dfab4c8ca2f1fa2499e22e974d9c">ADOConnection::outp</a>(<span class="stringliteral">"For odbc PConnect(), $argDatabasename is not used. Place dsn in 1st parameter."</span>);
<a name="l00078"></a>00078                 }
<a name="l00079"></a>00079         <span class="comment">//      print "dsn=$argDSN u=$argUsername p=$argPassword&lt;br&gt;"; flush();</span>
<a name="l00080"></a>00080                 <span class="keywordflow">if</span> ($this-&gt;curmode === <span class="keyword">false</span>) $this-&gt;_connectionID = odbc_connect($argDSN,$argUsername,$argPassword);
<a name="l00081"></a>00081                 <span class="keywordflow">else</span> $this-&gt;_connectionID = odbc_pconnect($argDSN,$argUsername,$argPassword,$this-&gt;curmode);
<a name="l00082"></a>00082                 
<a name="l00083"></a>00083                 $this-&gt;_errorMsg = isset($php_errormsg) ? $php_errormsg : '';
<a name="l00084"></a>00084                 <span class="keywordflow">if</span> ($this-&gt;_connectionID &amp;&amp; $this-&gt;autoRollback) @odbc_rollback($this-&gt;_connectionID);
<a name="l00085"></a>00085                 <span class="keywordflow">if</span> (isset($this-&gt;connectStmt)) $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>($this-&gt;connectStmt);
<a name="l00086"></a>00086                 
<a name="l00087"></a>00087                 <span class="keywordflow">return</span> $this-&gt;_connectionID != <span class="keyword">false</span>;
<a name="l00088"></a>00088         }
<a name="l00089"></a>00089 
<a name="l00090"></a>00090         
<a name="l00091"></a><a class="code" href="classADODB__odbc.html#3539c35663279e7493609d96c941933a">00091</a>         function <a class="code" href="classADODB__odbc.html#3539c35663279e7493609d96c941933a">ServerInfo</a>()
<a name="l00092"></a>00092         {
<a name="l00093"></a>00093         
<a name="l00094"></a>00094                 <span class="keywordflow">if</span> (!empty($this-&gt;host) &amp;&amp; ADODB_PHPVER &gt;= 0x4300) {
<a name="l00095"></a>00095                         $dsn = strtoupper($this-&gt;host);
<a name="l00096"></a>00096                         $first = <span class="keyword">true</span>;
<a name="l00097"></a>00097                         $found = <span class="keyword">false</span>;
<a name="l00098"></a>00098                         
<a name="l00099"></a>00099                         <span class="keywordflow">if</span> (!function_exists('odbc_data_source')) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00100"></a>00100                         
<a name="l00101"></a>00101                         <span class="keywordflow">while</span>(<span class="keyword">true</span>) {
<a name="l00102"></a>00102                                 
<a name="l00103"></a>00103                                 $rez = @odbc_data_source($this-&gt;_connectionID,
<a name="l00104"></a>00104                                         $first ? SQL_FETCH_FIRST : SQL_FETCH_NEXT);
<a name="l00105"></a>00105                                 $first = <span class="keyword">false</span>;
<a name="l00106"></a>00106                                 <span class="keywordflow">if</span> (!is_array($rez)) <span class="keywordflow">break</span>;
<a name="l00107"></a>00107                                 <span class="keywordflow">if</span> (strtoupper($rez['server']) == $dsn) {
<a name="l00108"></a>00108                                         $found = <span class="keyword">true</span>;
<a name="l00109"></a>00109                                         <span class="keywordflow">break</span>;
<a name="l00110"></a>00110                                 }
<a name="l00111"></a>00111                         } 
<a name="l00112"></a>00112                         <span class="keywordflow">if</span> (!$found) <span class="keywordflow">return</span> <a class="code" href="classADOConnection.html#bfa01fe0670d84bfbb0d93dbe8fc8020">ADOConnection::ServerInfo</a>();
<a name="l00113"></a>00113                         <span class="keywordflow">if</span> (!isset($rez['version'])) $rez['version'] = '';
<a name="l00114"></a>00114                         <span class="keywordflow">return</span> $rez;
<a name="l00115"></a>00115                 } <span class="keywordflow">else</span> {
<a name="l00116"></a>00116                         <span class="keywordflow">return</span> <a class="code" href="classADOConnection.html#bfa01fe0670d84bfbb0d93dbe8fc8020">ADOConnection::ServerInfo</a>();
<a name="l00117"></a>00117                 }
<a name="l00118"></a>00118         }
<a name="l00119"></a>00119 
<a name="l00120"></a>00120         
<a name="l00121"></a><a class="code" href="classADODB__odbc.html#7c821c1c2cc1bb8d05983ca9c31df350">00121</a>         function <a class="code" href="classADODB__odbc.html#7c821c1c2cc1bb8d05983ca9c31df350">CreateSequence</a>($seqname='adodbseq',$start=1)
<a name="l00122"></a>00122         {
<a name="l00123"></a>00123                 <span class="keywordflow">if</span> (empty($this-&gt;_genSeqSQL)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00124"></a>00124                 $ok = $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>(sprintf($this-&gt;_genSeqSQL,$seqname));
<a name="l00125"></a>00125                 <span class="keywordflow">if</span> (!$ok) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00126"></a>00126                 $start -= 1;
<a name="l00127"></a>00127                 <span class="keywordflow">return</span> $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>(<span class="stringliteral">"insert into $seqname values($start)"</span>);
<a name="l00128"></a>00128         }
<a name="l00129"></a>00129         
<a name="l00130"></a><a class="code" href="classADODB__odbc.html#34228583e66bf10e0449da621970eead">00130</a>         var <a class="code" href="classADODB__odbc.html#34228583e66bf10e0449da621970eead">$_dropSeqSQL</a> = 'drop table %s';
<a name="l00131"></a><a class="code" href="classADODB__odbc.html#5d40e3a8996e7afbb56f110ab849b712">00131</a>         function <a class="code" href="classADODB__odbc.html#5d40e3a8996e7afbb56f110ab849b712">DropSequence</a>($seqname)
<a name="l00132"></a>00132         {
<a name="l00133"></a>00133                 <span class="keywordflow">if</span> (empty($this-&gt;_dropSeqSQL)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00134"></a>00134                 <span class="keywordflow">return</span> $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>(sprintf($this-&gt;_dropSeqSQL,$seqname));
<a name="l00135"></a>00135         }
<a name="l00136"></a>00136         
<a name="l00137"></a>00137         <span class="comment">/*</span>
<a name="l00138"></a>00138 <span class="comment">                This algorithm is not very efficient, but works even if table locking</span>
<a name="l00139"></a>00139 <span class="comment">                is not available.</span>
<a name="l00140"></a>00140 <span class="comment">                </span>
<a name="l00141"></a>00141 <span class="comment">                Will return false if unable to generate an ID after $MAXLOOPS attempts.</span>
<a name="l00142"></a>00142 <span class="comment">        */</span>
<a name="l00143"></a><a class="code" href="classADODB__odbc.html#e8045867b94d81eb0feedbeb387895a9">00143</a>         function <a class="code" href="classADODB__odbc.html#e8045867b94d81eb0feedbeb387895a9">GenID</a>($seq='adodbseq',$start=1)
<a name="l00144"></a>00144         {       
<a name="l00145"></a>00145                 <span class="comment">// if you have to modify the parameter below, your database is overloaded,</span>
<a name="l00146"></a>00146                 <span class="comment">// or you need to implement generation of id's yourself!</span>
<a name="l00147"></a>00147                 $MAXLOOPS = 100;
<a name="l00148"></a>00148                 <span class="comment">//$this-&gt;debug=1;</span>
<a name="l00149"></a>00149                 <span class="keywordflow">while</span> (--$MAXLOOPS&gt;=0) {
<a name="l00150"></a>00150                         $num = $this-&gt;<a class="code" href="classADOConnection.html#cc46074c4b2354d07427f8887f92b994">GetOne</a>(<span class="stringliteral">"select id from $seq"</span>);
<a name="l00151"></a>00151                         <span class="keywordflow">if</span> ($num === <span class="keyword">false</span>) {
<a name="l00152"></a>00152                                 $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>(sprintf($this-&gt;_genSeqSQL ,$seq));       
<a name="l00153"></a>00153                                 $start -= 1;
<a name="l00154"></a>00154                                 $num = <span class="charliteral">'0'</span>;
<a name="l00155"></a>00155                                 $ok = $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>(<span class="stringliteral">"insert into $seq values($start)"</span>);
<a name="l00156"></a>00156                                 <span class="keywordflow">if</span> (!$ok) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00157"></a>00157                         } 
<a name="l00158"></a>00158                         $this-&gt;<a class="code" href="classADOConnection.html#ab584eb160768657bc4113ff4e41d40c">Execute</a>(<span class="stringliteral">"update $seq set id=id+1 where id=$num"</span>);
<a name="l00159"></a>00159                         
<a name="l00160"></a>00160                         <span class="keywordflow">if</span> ($this-&gt;affected_rows() &gt; 0) {
<a name="l00161"></a>00161                                 $num += 1;
<a name="l00162"></a>00162                                 $this-&gt;genID = $num;
<a name="l00163"></a>00163                                 <span class="keywordflow">return</span> $num;
<a name="l00164"></a>00164                         }
<a name="l00165"></a>00165                 }
<a name="l00166"></a>00166                 <span class="keywordflow">if</span> ($fn = $this-&gt;raiseErrorFn) {
<a name="l00167"></a>00167                         $fn($this-&gt;databaseType,'GENID',-32000,<span class="stringliteral">"Unable to generate unique id after $MAXLOOPS attempts"</span>,$seq,$num);
<a name="l00168"></a>00168                 }
<a name="l00169"></a>00169                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00170"></a>00170         }
<a name="l00171"></a>00171 
<a name="l00172"></a>00172 
<a name="l00173"></a><a class="code" href="classADODB__odbc.html#7639a775d77d7db07622ecb8d28ac732">00173</a>         function <a class="code" href="classADODB__odbc.html#7639a775d77d7db07622ecb8d28ac732">ErrorMsg</a>()
<a name="l00174"></a>00174         {
<a name="l00175"></a>00175                 <span class="keywordflow">if</span> ($this-&gt;_haserrorfunctions) {
<a name="l00176"></a>00176                         <span class="keywordflow">if</span> ($this-&gt;_errorMsg !== <span class="keyword">false</span>) <span class="keywordflow">return</span> $this-&gt;_errorMsg;
<a name="l00177"></a>00177                         <span class="keywordflow">if</span> (empty($this-&gt;_connectionID)) <span class="keywordflow">return</span> @odbc_errormsg();
<a name="l00178"></a>00178                         <span class="keywordflow">return</span> @odbc_errormsg($this-&gt;_connectionID);
<a name="l00179"></a>00179                 } <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classADOConnection.html#2ab9df2c8ee599b9d274ecb2ad25ae89">ADOConnection::ErrorMsg</a>();
<a name="l00180"></a>00180         }
<a name="l00181"></a>00181         
<a name="l00182"></a><a class="code" href="classADODB__odbc.html#e1d1308e94f28c04cc442a0d5410f087">00182</a>         function <a class="code" href="classADODB__odbc.html#e1d1308e94f28c04cc442a0d5410f087">ErrorNo</a>()
<a name="l00183"></a>00183         {
<a name="l00184"></a>00184                 
<a name="l00185"></a>00185                 <span class="keywordflow">if</span> ($this-&gt;_haserrorfunctions) {
<a name="l00186"></a>00186                         <span class="keywordflow">if</span> ($this-&gt;_errorCode !== <span class="keyword">false</span>) {
<a name="l00187"></a>00187                                 <span class="comment">// bug in 4.0.6, error number can be corrupted string (should be 6 digits)</span>
<a name="l00188"></a>00188                                 <span class="keywordflow">return</span> (strlen($this-&gt;_errorCode)&lt;=2) ? 0 : $this-&gt;_errorCode;
<a name="l00189"></a>00189                         }
<a name="l00190"></a>00190 
<a name="l00191"></a>00191                         <span class="keywordflow">if</span> (empty($this-&gt;_connectionID)) $e = @odbc_error(); 
<a name="l00192"></a>00192                         <span class="keywordflow">else</span> $e = @odbc_error($this-&gt;_connectionID);
<a name="l00193"></a>00193                         
<a name="l00194"></a>00194                          <span class="comment">// bug in 4.0.6, error number can be corrupted string (should be 6 digits)</span>
<a name="l00195"></a>00195                          <span class="comment">// so we check and patch</span>
<a name="l00196"></a>00196                         <span class="keywordflow">if</span> (strlen($e)&lt;=2) <span class="keywordflow">return</span> 0;
<a name="l00197"></a>00197                         <span class="keywordflow">return</span> $e;
<a name="l00198"></a>00198                 } <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classADOConnection.html#f69716681a34bb07c7a404fff65f5f88">ADOConnection::ErrorNo</a>();
<a name="l00199"></a>00199         }
<a name="l00200"></a>00200         
<a name="l00201"></a>00201         
<a name="l00202"></a>00202 
<a name="l00203"></a><a class="code" href="classADODB__odbc.html#a4e7217890ef34c1965f7c3c325f7b96">00203</a>         function <a class="code" href="classADODB__odbc.html#a4e7217890ef34c1965f7c3c325f7b96">BeginTrans</a>()
<a name="l00204"></a>00204         {       
<a name="l00205"></a>00205                 <span class="keywordflow">if</span> (!$this-&gt;hasTransactions) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00206"></a>00206                 <span class="keywordflow">if</span> ($this-&gt;transOff) <span class="keywordflow">return</span> <span class="keyword">true</span>; 
<a name="l00207"></a>00207                 $this-&gt;transCnt += 1;
<a name="l00208"></a>00208                 $this-&gt;_autocommit = <span class="keyword">false</span>;
<a name="l00209"></a>00209                 <span class="keywordflow">return</span> odbc_autocommit($this-&gt;_connectionID,<span class="keyword">false</span>);
<a name="l00210"></a>00210         }
<a name="l00211"></a>00211         
<a name="l00212"></a><a class="code" href="classADODB__odbc.html#0af9469a4fd66444d415e20842e5740b">00212</a>         function <a class="code" href="classADODB__odbc.html#0af9469a4fd66444d415e20842e5740b">CommitTrans</a>($ok=<span class="keyword">true</span>) 
<a name="l00213"></a>00213         { 
<a name="l00214"></a>00214                 <span class="keywordflow">if</span> ($this-&gt;transOff) <span class="keywordflow">return</span> <span class="keyword">true</span>; 
<a name="l00215"></a>00215                 <span class="keywordflow">if</span> (!$ok) <span class="keywordflow">return</span> $this-&gt;<a class="code" href="classADODB__odbc.html#fa3ec395a4c1dc3ca2882ed1c67aaad9">RollbackTrans</a>();
<a name="l00216"></a>00216                 <span class="keywordflow">if</span> ($this-&gt;transCnt) $this-&gt;transCnt -= 1;
<a name="l00217"></a>00217                 $this-&gt;_autocommit = <span class="keyword">true</span>;
<a name="l00218"></a>00218                 $ret = odbc_commit($this-&gt;_connectionID);
<a name="l00219"></a>00219                 odbc_autocommit($this-&gt;_connectionID,<span class="keyword">true</span>);
<a name="l00220"></a>00220                 <span class="keywordflow">return</span> $ret;
<a name="l00221"></a>00221         }
<a name="l00222"></a>00222         
<a name="l00223"></a><a class="code" href="classADODB__odbc.html#fa3ec395a4c1dc3ca2882ed1c67aaad9">00223</a>         function <a class="code" href="classADODB__odbc.html#fa3ec395a4c1dc3ca2882ed1c67aaad9">RollbackTrans</a>()
<a name="l00224"></a>00224         {
<a name="l00225"></a>00225                 <span class="keywordflow">if</span> ($this-&gt;transOff) <span class="keywordflow">return</span> <span class="keyword">true</span>; 
<a name="l00226"></a>00226                 <span class="keywordflow">if</span> ($this-&gt;transCnt) $this-&gt;transCnt -= 1;
<a name="l00227"></a>00227                 $this-&gt;_autocommit = <span class="keyword">true</span>;
<a name="l00228"></a>00228                 $ret = odbc_rollback($this-&gt;_connectionID);
<a name="l00229"></a>00229                 odbc_autocommit($this-&gt;_connectionID,<span class="keyword">true</span>);
<a name="l00230"></a>00230                 <span class="keywordflow">return</span> $ret;
<a name="l00231"></a>00231         }
<a name="l00232"></a>00232         
<a name="l00233"></a><a class="code" href="classADODB__odbc.html#4ec142881ceb635895b0c1aeb48db716">00233</a>         function <a class="code" href="classADODB__odbc.html#4ec142881ceb635895b0c1aeb48db716">MetaPrimaryKeys</a>($table)
<a name="l00234"></a>00234         {
<a name="l00235"></a>00235         global $ADODB_FETCH_MODE;
<a name="l00236"></a>00236         
<a name="l00237"></a>00237                 <span class="keywordflow">if</span> ($this-&gt;uCaseTables) $table = strtoupper($table);
<a name="l00238"></a>00238                 $schema = '';
<a name="l00239"></a>00239                 $this-&gt;<a class="code" href="classADOConnection.html#fb74c193cc6f25979736122f64dce696">_findschema</a>($table,$schema);
<a name="l00240"></a>00240 
<a name="l00241"></a>00241                 $savem = $ADODB_FETCH_MODE;
<a name="l00242"></a>00242                 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
<a name="l00243"></a>00243                 $qid = @odbc_primarykeys($this-&gt;_connectionID,'',$schema,$table);
<a name="l00244"></a>00244                 
<a name="l00245"></a>00245                 <span class="keywordflow">if</span> (!$qid) {
<a name="l00246"></a>00246                         $ADODB_FETCH_MODE = $savem;
<a name="l00247"></a>00247                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00248"></a>00248                 }
<a name="l00249"></a>00249                 $rs = <span class="keyword">new</span> <a class="code" href="classADORecordSet__odbc.html">ADORecordSet_odbc</a>($qid);
<a name="l00250"></a>00250                 $ADODB_FETCH_MODE = $savem;
<a name="l00251"></a>00251                 
<a name="l00252"></a>00252                 <span class="keywordflow">if</span> (!$rs) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00253"></a>00253                 $rs-&gt;_has_stupid_odbc_fetch_api_change = $this-&gt;_has_stupid_odbc_fetch_api_change;
<a name="l00254"></a>00254                 
<a name="l00255"></a>00255                 $arr =&amp; $rs-&gt;GetArray();
<a name="l00256"></a>00256                 $rs-&gt;Close();
<a name="l00257"></a>00257                 <span class="comment">//print_r($arr);</span>
<a name="l00258"></a>00258                 $arr2 = array();
<a name="l00259"></a>00259                 <span class="keywordflow">for</span> ($i=0; $i &lt; <span class="keyword">sizeof</span>($arr); $i++) {
<a name="l00260"></a>00260                         <span class="keywordflow">if</span> ($arr[$i][3]) $arr2[] = $arr[$i][3];
<a name="l00261"></a>00261                 }
<a name="l00262"></a>00262                 <span class="keywordflow">return</span> $arr2;
<a name="l00263"></a>00263         }
<a name="l00264"></a>00264         
<a name="l00265"></a>00265         
<a name="l00266"></a>00266         
<a name="l00267"></a><a class="code" href="classADODB__odbc.html#2342e91861d5a78c52dd0e200e4298be">00267</a>         function &amp;MetaTables($ttype=<span class="keyword">false</span>)
<a name="l00268"></a>00268         {
<a name="l00269"></a>00269         global $ADODB_FETCH_MODE;
<a name="l00270"></a>00270         
<a name="l00271"></a>00271                 $savem = $ADODB_FETCH_MODE;
<a name="l00272"></a>00272                 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
<a name="l00273"></a>00273                 $qid = odbc_tables($this-&gt;_connectionID);
<a name="l00274"></a>00274                 
<a name="l00275"></a>00275                 $rs = <span class="keyword">new</span> <a class="code" href="classADORecordSet__odbc.html">ADORecordSet_odbc</a>($qid);
<a name="l00276"></a>00276                 
<a name="l00277"></a>00277                 $ADODB_FETCH_MODE = $savem;
<a name="l00278"></a>00278                 <span class="keywordflow">if</span> (!$rs) {
<a name="l00279"></a>00279                         $false = <span class="keyword">false</span>;
<a name="l00280"></a>00280                         <span class="keywordflow">return</span> $false;
<a name="l00281"></a>00281                 }
<a name="l00282"></a>00282                 $rs-&gt;_has_stupid_odbc_fetch_api_change = $this-&gt;_has_stupid_odbc_fetch_api_change;
<a name="l00283"></a>00283                 
<a name="l00284"></a>00284                 $arr =&amp; $rs-&gt;GetArray();
<a name="l00285"></a>00285                 <span class="comment">//print_r($arr);</span>
<a name="l00286"></a>00286                 
<a name="l00287"></a>00287                 $rs-&gt;Close();
<a name="l00288"></a>00288                 $arr2 = array();
<a name="l00289"></a>00289                 
<a name="l00290"></a>00290                 <span class="keywordflow">if</span> ($ttype) {
<a name="l00291"></a>00291                         $isview = strncmp($ttype,<span class="charliteral">'V'</span>,1) === 0;
<a name="l00292"></a>00292                 }
<a name="l00293"></a>00293                 <span class="keywordflow">for</span> ($i=0; $i &lt; <span class="keyword">sizeof</span>($arr); $i++) {
<a name="l00294"></a>00294                         <span class="keywordflow">if</span> (!$arr[$i][2]) <span class="keywordflow">continue</span>;
<a name="l00295"></a>00295                         $type = $arr[$i][3];
<a name="l00296"></a>00296                         <span class="keywordflow">if</span> ($ttype) { 
<a name="l00297"></a>00297                                 <span class="keywordflow">if</span> ($isview) {
<a name="l00298"></a>00298                                         <span class="keywordflow">if</span> (strncmp($type,<span class="charliteral">'V'</span>,1) === 0) $arr2[] = $arr[$i][2];
<a name="l00299"></a>00299                                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2];
<a name="l00300"></a>00300                         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp($type,'SYS',3) !== 0) $arr2[] = $arr[$i][2];
<a name="l00301"></a>00301                 }
<a name="l00302"></a>00302                 <span class="keywordflow">return</span> $arr2;
<a name="l00303"></a>00303         }
<a name="l00304"></a>00304         
<a name="l00305"></a>00305 <span class="comment">/*</span>
<a name="l00306"></a>00306 <span class="comment">See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcdatetime_data_type_changes.asp</span>
<a name="l00307"></a>00307 <span class="comment">/ SQL data type codes /</span>
<a name="l00308"></a>00308 <span class="comment">#define SQL_UNKNOWN_TYPE        0</span>
<a name="l00309"></a>00309 <span class="comment">#define SQL_CHAR                        1</span>
<a name="l00310"></a>00310 <span class="comment">#define SQL_NUMERIC              2</span>
<a name="l00311"></a>00311 <span class="comment">#define SQL_DECIMAL              3</span>
<a name="l00312"></a>00312 <span class="comment">#define SQL_INTEGER              4</span>
<a name="l00313"></a>00313 <span class="comment">#define SQL_SMALLINT            5</span>
<a name="l00314"></a>00314 <span class="comment">#define SQL_FLOAT                  6</span>
<a name="l00315"></a>00315 <span class="comment">#define SQL_REAL                        7</span>
<a name="l00316"></a>00316 <span class="comment">#define SQL_DOUBLE                8</span>
<a name="l00317"></a>00317 <span class="comment">#if (ODBCVER &gt;= 0x0300)</span>
<a name="l00318"></a>00318 <span class="comment">#define SQL_DATETIME            9</span>
<a name="l00319"></a>00319 <span class="comment">#endif</span>
<a name="l00320"></a>00320 <span class="comment">#define SQL_VARCHAR             12</span>
<a name="l00321"></a>00321 <span class="comment"></span>
<a name="l00322"></a>00322 <span class="comment"></span>
<a name="l00323"></a>00323 <span class="comment">/ One-parameter shortcuts for date/time data types /</span>
<a name="l00324"></a>00324 <span class="comment">#if (ODBCVER &gt;= 0x0300)</span>
<a name="l00325"></a>00325 <span class="comment">#define SQL_TYPE_DATE     91</span>
<a name="l00326"></a>00326 <span class="comment">#define SQL_TYPE_TIME     92</span>
<a name="l00327"></a>00327 <span class="comment">#define SQL_TYPE_TIMESTAMP 93</span>
<a name="l00328"></a>00328 <span class="comment"></span>
<a name="l00329"></a>00329 <span class="comment">#define SQL_UNICODE                             (-95)</span>
<a name="l00330"></a>00330 <span class="comment">#define SQL_UNICODE_VARCHAR                     (-96)</span>
<a name="l00331"></a>00331 <span class="comment">#define SQL_UNICODE_LONGVARCHAR                 (-97)</span>
<a name="l00332"></a>00332 <span class="comment">*/</span>
<a name="l00333"></a><a class="code" href="classADODB__odbc.html#c3dee01b06fe948fe9a61fb91136cdd0">00333</a>         function ODBCTypes($t)
<a name="l00334"></a>00334         {
<a name="l00335"></a>00335                 <span class="keywordflow">switch</span> ((integer)$t) {
<a name="l00336"></a>00336                 <span class="keywordflow">case</span> 1: 
<a name="l00337"></a>00337                 <span class="keywordflow">case</span> 12:
<a name="l00338"></a>00338                 <span class="keywordflow">case</span> 0:
<a name="l00339"></a>00339                 <span class="keywordflow">case</span> -95:
<a name="l00340"></a>00340                 <span class="keywordflow">case</span> -96:
<a name="l00341"></a>00341                         <span class="keywordflow">return</span> <span class="charliteral">'C'</span>;
<a name="l00342"></a>00342                 <span class="keywordflow">case</span> -97:
<a name="l00343"></a>00343                 <span class="keywordflow">case</span> -1: <span class="comment">//text</span>
<a name="l00344"></a>00344                         <span class="keywordflow">return</span> <span class="charliteral">'X'</span>;
<a name="l00345"></a>00345                 <span class="keywordflow">case</span> -4: <span class="comment">//image</span>
<a name="l00346"></a>00346                         <span class="keywordflow">return</span> <span class="charliteral">'B'</span>;
<a name="l00347"></a>00347                                 
<a name="l00348"></a>00348                 <span class="keywordflow">case</span> 9: 
<a name="l00349"></a>00349                 <span class="keywordflow">case</span> 91:
<a name="l00350"></a>00350                         <span class="keywordflow">return</span> <span class="charliteral">'D'</span>;
<a name="l00351"></a>00351                 
<a name="l00352"></a>00352                 <span class="keywordflow">case</span> 10:
<a name="l00353"></a>00353                 <span class="keywordflow">case</span> 11:
<a name="l00354"></a>00354                 <span class="keywordflow">case</span> 92:
<a name="l00355"></a>00355                 <span class="keywordflow">case</span> 93:
<a name="l00356"></a>00356                         <span class="keywordflow">return</span> <span class="charliteral">'T'</span>;
<a name="l00357"></a>00357                         
<a name="l00358"></a>00358                 <span class="keywordflow">case</span> 4:
<a name="l00359"></a>00359                 <span class="keywordflow">case</span> 5:
<a name="l00360"></a>00360                 <span class="keywordflow">case</span> -6:
<a name="l00361"></a>00361                         <span class="keywordflow">return</span> <span class="charliteral">'I'</span>;
<a name="l00362"></a>00362                         
<a name="l00363"></a>00363                 <span class="keywordflow">case</span> -11: <span class="comment">// uniqidentifier</span>
<a name="l00364"></a>00364                         <span class="keywordflow">return</span> <span class="charliteral">'R'</span>;
<a name="l00365"></a>00365                 <span class="keywordflow">case</span> -7: <span class="comment">//bit</span>
<a name="l00366"></a>00366                         <span class="keywordflow">return</span> <span class="charliteral">'L'</span>;
<a name="l00367"></a>00367                 
<a name="l00368"></a>00368                 <span class="keywordflow">default</span>:
<a name="l00369"></a>00369                         <span class="keywordflow">return</span> <span class="charliteral">'N'</span>;
<a name="l00370"></a>00370                 }
<a name="l00371"></a>00371         }
<a name="l00372"></a>00372         
<a name="l00373"></a><a class="code" href="classADODB__odbc.html#b8b3c7b562ad47f339dfb71e15f2f431">00373</a>         function &amp;MetaColumns($table)
<a name="l00374"></a>00374         {
<a name="l00375"></a>00375         global $ADODB_FETCH_MODE;
<a name="l00376"></a>00376         
<a name="l00377"></a>00377                 $false = <span class="keyword">false</span>;
<a name="l00378"></a>00378                 <span class="keywordflow">if</span> ($this-&gt;uCaseTables) $table = strtoupper($table);
<a name="l00379"></a>00379                 $schema = '';
<a name="l00380"></a>00380                 $this-&gt;_findschema($table,$schema);
<a name="l00381"></a>00381                 
<a name="l00382"></a>00382                 $savem = $ADODB_FETCH_MODE;
<a name="l00383"></a>00383                 $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
<a name="l00384"></a>00384         
<a name="l00385"></a>00385                 <span class="comment">/*if (false) { // after testing, confirmed that the following does not work becoz of a bug</span>
<a name="l00386"></a>00386 <span class="comment">                        $qid2 = odbc_tables($this-&gt;_connectionID);</span>
<a name="l00387"></a>00387 <span class="comment">                        $rs = new ADORecordSet_odbc($qid2);             </span>
<a name="l00388"></a>00388 <span class="comment">                        $ADODB_FETCH_MODE = $savem;</span>
<a name="l00389"></a>00389 <span class="comment">                        if (!$rs) return false;</span>
<a name="l00390"></a>00390 <span class="comment">                        $rs-&gt;_has_stupid_odbc_fetch_api_change = $this-&gt;_has_stupid_odbc_fetch_api_change;</span>
<a name="l00391"></a>00391 <span class="comment">                        $rs-&gt;_fetch();</span>
<a name="l00392"></a>00392 <span class="comment">                        </span>
<a name="l00393"></a>00393 <span class="comment">                        while (!$rs-&gt;EOF) {</span>
<a name="l00394"></a>00394 <span class="comment">                                if ($table == strtoupper($rs-&gt;fields[2])) {</span>
<a name="l00395"></a>00395 <span class="comment">                                        $q = $rs-&gt;fields[0];</span>
<a name="l00396"></a>00396 <span class="comment">                                        $o = $rs-&gt;fields[1];</span>
<a name="l00397"></a>00397 <span class="comment">                                        break;</span>
<a name="l00398"></a>00398 <span class="comment">                                }</span>
<a name="l00399"></a>00399 <span class="comment">                                $rs-&gt;MoveNext();</span>
<a name="l00400"></a>00400 <span class="comment">                        }</span>
<a name="l00401"></a>00401 <span class="comment">                        $rs-&gt;Close();</span>
<a name="l00402"></a>00402 <span class="comment">                        </span>
<a name="l00403"></a>00403 <span class="comment">                        $qid = odbc_columns($this-&gt;_connectionID,$q,$o,strtoupper($table),'%');</span>
<a name="l00404"></a>00404 <span class="comment">                } */</span>
<a name="l00405"></a>00405                 
<a name="l00406"></a>00406                 <span class="keywordflow">switch</span> ($this-&gt;databaseType) {
<a name="l00407"></a>00407                 <span class="keywordflow">case</span> 'access':
<a name="l00408"></a>00408                 <span class="keywordflow">case</span> 'vfp':
<a name="l00409"></a>00409                         $qid = odbc_columns($this-&gt;_connectionID);#,<span class="charliteral">'%'</span>,'',strtoupper($table),<span class="charliteral">'%'</span>);
<a name="l00410"></a>00410                         <span class="keywordflow">break</span>;
<a name="l00411"></a>00411                 
<a name="l00412"></a>00412                 
<a name="l00413"></a>00413                 <span class="keywordflow">case</span> 'db2':
<a name="l00414"></a>00414             $colname = <span class="stringliteral">"%"</span>;
<a name="l00415"></a>00415             $qid = odbc_columns($this-&gt;_connectionID, <span class="stringliteral">""</span>, $schema, $table, $colname);
<a name="l00416"></a>00416             <span class="keywordflow">break</span>;
<a name="l00417"></a>00417                         
<a name="l00418"></a>00418                 <span class="keywordflow">default</span>:
<a name="l00419"></a>00419                         $qid = @odbc_columns($this-&gt;_connectionID,<span class="charliteral">'%'</span>,<span class="charliteral">'%'</span>,strtoupper($table),<span class="charliteral">'%'</span>);
<a name="l00420"></a>00420                         <span class="keywordflow">if</span> (empty($qid)) $qid = odbc_columns($this-&gt;_connectionID);
<a name="l00421"></a>00421                         <span class="keywordflow">break</span>;
<a name="l00422"></a>00422                 }
<a name="l00423"></a>00423                 <span class="keywordflow">if</span> (empty($qid)) <span class="keywordflow">return</span> $false;
<a name="l00424"></a>00424                 
<a name="l00425"></a>00425                 $rs =&amp; <span class="keyword">new</span> <a class="code" href="classADORecordSet__odbc.html">ADORecordSet_odbc</a>($qid);
<a name="l00426"></a>00426                 $ADODB_FETCH_MODE = $savem;
<a name="l00427"></a>00427                 
<a name="l00428"></a>00428                 <span class="keywordflow">if</span> (!$rs) <span class="keywordflow">return</span> $false;
<a name="l00429"></a>00429                 $rs-&gt;_has_stupid_odbc_fetch_api_change = $this-&gt;_has_stupid_odbc_fetch_api_change;
<a name="l00430"></a>00430                 $rs-&gt;_fetch();
<a name="l00431"></a>00431                 
<a name="l00432"></a>00432                 $retarr = array();
<a name="l00433"></a>00433                 
<a name="l00434"></a>00434                 <span class="comment">/*</span>
<a name="l00435"></a>00435 <span class="comment">                $rs-&gt;fields indices</span>
<a name="l00436"></a>00436 <span class="comment">                0 TABLE_QUALIFIER</span>
<a name="l00437"></a>00437 <span class="comment">                1 TABLE_SCHEM</span>
<a name="l00438"></a>00438 <span class="comment">                2 TABLE_NAME</span>
<a name="l00439"></a>00439 <span class="comment">                3 COLUMN_NAME</span>
<a name="l00440"></a>00440 <span class="comment">                4 DATA_TYPE</span>
<a name="l00441"></a>00441 <span class="comment">                5 TYPE_NAME</span>
<a name="l00442"></a>00442 <span class="comment">                6 PRECISION</span>
<a name="l00443"></a>00443 <span class="comment">                7 LENGTH</span>
<a name="l00444"></a>00444 <span class="comment">                8 SCALE</span>
<a name="l00445"></a>00445 <span class="comment">                9 RADIX</span>
<a name="l00446"></a>00446 <span class="comment">                10 NULLABLE</span>
<a name="l00447"></a>00447 <span class="comment">                11 REMARKS</span>
<a name="l00448"></a>00448 <span class="comment">                */</span>
<a name="l00449"></a>00449                 <span class="keywordflow">while</span> (!$rs-&gt;EOF) {
<a name="l00450"></a>00450                 <span class="comment">//      adodb_pr($rs-&gt;fields);</span>
<a name="l00451"></a>00451                         <span class="keywordflow">if</span> (strtoupper(trim($rs-&gt;fields[2])) == $table &amp;&amp; (!$schema || strtoupper($rs-&gt;fields[1]) == $schema)) {
<a name="l00452"></a>00452                                 $fld = <span class="keyword">new</span> <a class="code" href="classADOFieldObject.html">ADOFieldObject</a>();
<a name="l00453"></a>00453                                 $fld-&gt;name = $rs-&gt;fields[3];
<a name="l00454"></a>00454                                 $fld-&gt;type = $this-&gt;ODBCTypes($rs-&gt;fields[4]);
<a name="l00455"></a>00455                                 
<a name="l00456"></a>00456                                 <span class="comment">// ref: http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnaraccgen/html/msdn_odk.asp</span>
<a name="l00457"></a>00457                                 <span class="comment">// access uses precision to store length for char/varchar</span>
<a name="l00458"></a>00458                                 <span class="keywordflow">if</span> ($fld-&gt;type == <span class="charliteral">'C'</span> or $fld-&gt;type == <span class="charliteral">'X'</span>) {
<a name="l00459"></a>00459                                         <span class="keywordflow">if</span> ($this-&gt;databaseType == 'access') 
<a name="l00460"></a>00460                                                 $fld-&gt;max_length = $rs-&gt;fields[6];
<a name="l00461"></a>00461                                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> ($rs-&gt;fields[4] &lt;= -95) <span class="comment">// UNICODE</span>
<a name="l00462"></a>00462                                                 $fld-&gt;max_length = $rs-&gt;fields[7]/2;
<a name="l00463"></a>00463                                         <span class="keywordflow">else</span>
<a name="l00464"></a>00464                                                 $fld-&gt;max_length = $rs-&gt;fields[7];
<a name="l00465"></a>00465                                 } <span class="keywordflow">else</span> 
<a name="l00466"></a>00466                                         $fld-&gt;max_length = $rs-&gt;fields[7];
<a name="l00467"></a>00467                                 $fld-&gt;not_null = !empty($rs-&gt;fields[10]);
<a name="l00468"></a>00468                                 $fld-&gt;scale = $rs-&gt;fields[8];
<a name="l00469"></a>00469                                 $retarr[strtoupper($fld-&gt;name)] = $fld; 
<a name="l00470"></a>00470                         } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">sizeof</span>($retarr)&gt;0)
<a name="l00471"></a>00471                                 <span class="keywordflow">break</span>;
<a name="l00472"></a>00472                         $rs-&gt;MoveNext();
<a name="l00473"></a>00473                 }
<a name="l00474"></a>00474                 $rs-&gt;Close(); <span class="comment">//-- crashes 4.03pl1 -- why?</span>
<a name="l00475"></a>00475                 
<a name="l00476"></a>00476                 <span class="keywordflow">if</span> (empty($retarr)) $retarr = <span class="keyword">false</span>;
<a name="l00477"></a>00477                 <span class="keywordflow">return</span> $retarr;
<a name="l00478"></a>00478         }
<a name="l00479"></a>00479         
<a name="l00480"></a><a class="code" href="classADODB__odbc.html#db2beaeabeaa1563d64fc29fecb0a691">00480</a>         function Prepare($sql)
<a name="l00481"></a>00481         {
<a name="l00482"></a>00482                 <span class="keywordflow">if</span> (! $this-&gt;_bindInputArray) <span class="keywordflow">return</span> $sql; <span class="comment">// no binding</span>
<a name="l00483"></a>00483                 $stmt = odbc_prepare($this-&gt;_connectionID,$sql);
<a name="l00484"></a>00484                 <span class="keywordflow">if</span> (!$stmt) {
<a name="l00485"></a>00485                         <span class="comment">// we don't know whether odbc driver is parsing prepared stmts, so just return sql</span>
<a name="l00486"></a>00486                         <span class="keywordflow">return</span> $sql;
<a name="l00487"></a>00487                 }
<a name="l00488"></a>00488                 <span class="keywordflow">return</span> array($sql,$stmt,<span class="keyword">false</span>);
<a name="l00489"></a>00489         }
<a name="l00490"></a>00490 
<a name="l00491"></a>00491         <span class="comment">/* returns queryID or false */</span>
<a name="l00492"></a><a class="code" href="classADODB__odbc.html#b566db8ee4b7299952d4e8fc27a5ea0d">00492</a>         function _query($sql,$inputarr=<span class="keyword">false</span>) 
<a name="l00493"></a>00493         {
<a name="l00494"></a>00494         GLOBAL $php_errormsg;
<a name="l00495"></a>00495                 <span class="keywordflow">if</span> (isset($php_errormsg)) $php_errormsg = '';
<a name="l00496"></a>00496                 $this-&gt;_error = '';
<a name="l00497"></a>00497                 
<a name="l00498"></a>00498                 <span class="keywordflow">if</span> ($inputarr) {
<a name="l00499"></a>00499                         <span class="keywordflow">if</span> (is_array($sql)) {
<a name="l00500"></a>00500                                 $stmtid = $sql[1];
<a name="l00501"></a>00501                         } <span class="keywordflow">else</span> {
<a name="l00502"></a>00502                                 $stmtid = odbc_prepare($this-&gt;_connectionID,$sql);
<a name="l00503"></a>00503         
<a name="l00504"></a>00504                                 <span class="keywordflow">if</span> ($stmtid == <span class="keyword">false</span>) {
<a name="l00505"></a>00505                                         $this-&gt;_errorMsg = isset($php_errormsg) ? $php_errormsg : '';
<a name="l00506"></a>00506                                         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00507"></a>00507                                 }
<a name="l00508"></a>00508                         }
<a name="l00509"></a>00509                         
<a name="l00510"></a>00510                         <span class="keywordflow">if</span> (! odbc_execute($stmtid,$inputarr)) {
<a name="l00511"></a>00511                                 <span class="comment">//@odbc_free_result($stmtid);</span>
<a name="l00512"></a>00512                                 <span class="keywordflow">if</span> ($this-&gt;_haserrorfunctions) {
<a name="l00513"></a>00513                                         $this-&gt;_errorMsg = odbc_errormsg();
<a name="l00514"></a>00514                                         $this-&gt;_errorCode = odbc_error();
<a name="l00515"></a>00515                                 }
<a name="l00516"></a>00516                                 <span class="keywordflow">if</span>($this-&gt;_errorCode == '00000') {      <span class="comment">// MS SQL Server sometimes returns this in combination with the FreeTDS</span>
<a name="l00517"></a>00517                                         $this-&gt;_errorMsg = '';          <span class="comment">// driver and UnixODBC under Linux. This fixes the bogus "error"</span>
<a name="l00518"></a>00518                                         $this-&gt;_errorCode = 0;          <span class="comment">// &lt;karsten@typo3.org&gt;</span>
<a name="l00519"></a>00519                                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00520"></a>00520                                 }
<a name="l00521"></a>00521                                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00522"></a>00522                         }
<a name="l00523"></a>00523                 
<a name="l00524"></a>00524                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (is_array($sql)) {
<a name="l00525"></a>00525                         $stmtid = $sql[1];
<a name="l00526"></a>00526                         <span class="keywordflow">if</span> (!odbc_execute($stmtid)) {
<a name="l00527"></a>00527                                 <span class="comment">//@odbc_free_result($stmtid);</span>
<a name="l00528"></a>00528                                 <span class="keywordflow">if</span> ($this-&gt;_haserrorfunctions) {
<a name="l00529"></a>00529                                         $this-&gt;_errorMsg = odbc_errormsg();
<a name="l00530"></a>00530                                         $this-&gt;_errorCode = odbc_error();
<a name="l00531"></a>00531                                 }
<a name="l00532"></a>00532                                 <span class="keywordflow">if</span>($this-&gt;_errorCode == '00000') {      <span class="comment">// MS SQL Server sometimes returns this in combination with the FreeTDS</span>
<a name="l00533"></a>00533                                         $this-&gt;_errorMsg = '';          <span class="comment">// driver and UnixODBC under Linux. This fixes the bogus "error"</span>
<a name="l00534"></a>00534                                         $this-&gt;_errorCode = 0;          <span class="comment">// &lt;karsten@typo3.org&gt;</span>
<a name="l00535"></a>00535                                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00536"></a>00536                                 }
<a name="l00537"></a>00537                                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00538"></a>00538                         }
<a name="l00539"></a>00539                 } <span class="keywordflow">else</span>
<a name="l00540"></a>00540                         $stmtid = odbc_exec($this-&gt;_connectionID,$sql);
<a name="l00541"></a>00541                 
<a name="l00542"></a>00542                 $this-&gt;_lastAffectedRows = 0;
<a name="l00543"></a>00543                 <span class="keywordflow">if</span> ($stmtid) {
<a name="l00544"></a>00544                         <span class="keywordflow">if</span> (@odbc_num_fields($stmtid) == 0) {
<a name="l00545"></a>00545                                 $this-&gt;_lastAffectedRows = odbc_num_rows($stmtid);
<a name="l00546"></a>00546                                 $stmtid = <span class="keyword">true</span>;
<a name="l00547"></a>00547                         } <span class="keywordflow">else</span> {
<a name="l00548"></a>00548                                 $this-&gt;_lastAffectedRows = 0;
<a name="l00549"></a>00549                                 odbc_binmode($stmtid,$this-&gt;binmode);
<a name="l00550"></a>00550                                 odbc_longreadlen($stmtid,$this-&gt;maxblobsize);
<a name="l00551"></a>00551                         }
<a name="l00552"></a>00552                         
<a name="l00553"></a>00553                         <span class="keywordflow">if</span> ($this-&gt;_haserrorfunctions) {
<a name="l00554"></a>00554                                 $this-&gt;_errorMsg = '';
<a name="l00555"></a>00555                                 $this-&gt;_errorCode = 0;
<a name="l00556"></a>00556                         } <span class="keywordflow">else</span>
<a name="l00557"></a>00557                                 $this-&gt;_errorMsg = isset($php_errormsg) ? $php_errormsg : '';
<a name="l00558"></a>00558                 } <span class="keywordflow">else</span> {
<a name="l00559"></a>00559                         <span class="keywordflow">if</span> ($this-&gt;_haserrorfunctions) {
<a name="l00560"></a>00560                                 $this-&gt;_errorMsg = odbc_errormsg();
<a name="l00561"></a>00561                                 $this-&gt;_errorCode = odbc_error();
<a name="l00562"></a>00562                         } <span class="keywordflow">else</span>
<a name="l00563"></a>00563                                 $this-&gt;_errorMsg = isset($php_errormsg) ? $php_errormsg : '';
<a name="l00564"></a>00564                 }
<a name="l00565"></a>00565                 <span class="keywordflow">return</span> $stmtid;
<a name="l00566"></a>00566         }
<a name="l00567"></a>00567 
<a name="l00568"></a>00568         <span class="comment">/*</span>
<a name="l00569"></a>00569 <span class="comment">                Insert a null into the blob field of the table first.</span>
<a name="l00570"></a>00570 <span class="comment">                Then use UpdateBlob to store the blob.</span>
<a name="l00571"></a>00571 <span class="comment">                </span>
<a name="l00572"></a>00572 <span class="comment">                Usage:</span>
<a name="l00573"></a>00573 <span class="comment">                 </span>
<a name="l00574"></a>00574 <span class="comment">                $conn-&gt;Execute('INSERT INTO blobtable (id, blobcol) VALUES (1, null)');</span>
<a name="l00575"></a>00575 <span class="comment">                $conn-&gt;UpdateBlob('blobtable','blobcol',$blob,'id=1');</span>
<a name="l00576"></a>00576 <span class="comment">        */</span>
<a name="l00577"></a><a class="code" href="classADODB__odbc.html#ba3b8f62259122db90fc3213ea37af07">00577</a>         function UpdateBlob($table,$column,$val,$where,$blobtype='BLOB')
<a name="l00578"></a>00578         {
<a name="l00579"></a>00579                 <span class="keywordflow">return</span> $this-&gt;Execute(<span class="stringliteral">"UPDATE $table SET $column=? WHERE $where"</span>,array($val)) != <span class="keyword">false</span>;
<a name="l00580"></a>00580         }
<a name="l00581"></a>00581         
<a name="l00582"></a>00582         <span class="comment">// returns true or false</span>
<a name="l00583"></a><a class="code" href="classADODB__odbc.html#b6fff22652252d6ffc43eb417e86ae3e">00583</a>         function _close()
<a name="l00584"></a>00584         {
<a name="l00585"></a>00585                 $ret = @odbc_close($this-&gt;_connectionID);
<a name="l00586"></a>00586                 $this-&gt;_connectionID = <span class="keyword">false</span>;
<a name="l00587"></a>00587                 <span class="keywordflow">return</span> $ret;
<a name="l00588"></a>00588         }
<a name="l00589"></a>00589 
<a name="l00590"></a><a class="code" href="classADODB__odbc.html#ee8d50f35b20f4e03b7780b75aebf315">00590</a>         function _affectedrows()
<a name="l00591"></a>00591         {
<a name="l00592"></a>00592                 <span class="keywordflow">return</span> $this-&gt;_lastAffectedRows;
<a name="l00593"></a>00593         }
<a name="l00594"></a>00594         
<a name="l00595"></a>00595 }
<a name="l00596"></a>00596         
<a name="l00597"></a>00597 <span class="comment">/*--------------------------------------------------------------------------------------</span>
<a name="l00598"></a>00598 <span class="comment">         Class Name: Recordset</span>
<a name="l00599"></a>00599 <span class="comment">--------------------------------------------------------------------------------------*/</span>
<a name="l00600"></a>00600 
<a name="l00601"></a><a class="code" href="classADORecordSet__odbc.html">00601</a> <span class="keyword">class </span><a class="code" href="classADORecordSet__odbc.html">ADORecordSet_odbc</a> <span class="keyword">extends</span> <a class="code" href="classADORecordSet.html">ADORecordSet</a> {  
<a name="l00602"></a>00602         
<a name="l00603"></a><a class="code" href="classADORecordSet__odbc.html#5c0246f91b3ab73f44762c04ed645c7d">00603</a>         var <a class="code" href="classADORecordSet__odbc.html#5c0246f91b3ab73f44762c04ed645c7d">$bind</a> = <span class="keyword">false</span>;
<a name="l00604"></a><a class="code" href="classADORecordSet__odbc.html#466f7b0bdfa6990041ff61c648572467">00604</a>         var <a class="code" href="classADORecordSet__odbc.html#466f7b0bdfa6990041ff61c648572467">$databaseType</a> = <span class="stringliteral">"odbc"</span>;             
<a name="l00605"></a><a class="code" href="classADORecordSet__odbc.html#f296f959f42019760d0e30d06aa251ce">00605</a>         var <a class="code" href="classADORecordSet__odbc.html#f296f959f42019760d0e30d06aa251ce">$dataProvider</a> = <span class="stringliteral">"odbc"</span>;
<a name="l00606"></a><a class="code" href="classADORecordSet__odbc.html#912bcd95a715af42ea716d8a4c011041">00606</a>         var <a class="code" href="classADORecordSet__odbc.html#912bcd95a715af42ea716d8a4c011041">$useFetchArray</a>;
<a name="l00607"></a><a class="code" href="classADORecordSet__odbc.html#0a4722c25f087faab08ac8615b9949ae">00607</a>         var <a class="code" href="classADORecordSet__odbc.html#0a4722c25f087faab08ac8615b9949ae">$_has_stupid_odbc_fetch_api_change</a>;
<a name="l00608"></a>00608         
<a name="l00609"></a><a class="code" href="classADORecordSet__odbc.html#1a3b48ac4fadfb73d1f0a876d76211ca">00609</a>         function <a class="code" href="classADORecordSet__odbc.html#1a3b48ac4fadfb73d1f0a876d76211ca">ADORecordSet_odbc</a>($id,$mode=<span class="keyword">false</span>)
<a name="l00610"></a>00610         {
<a name="l00611"></a>00611                 <span class="keywordflow">if</span> ($mode === <span class="keyword">false</span>) {  
<a name="l00612"></a>00612                         global $ADODB_FETCH_MODE;
<a name="l00613"></a>00613                         $mode = $ADODB_FETCH_MODE;
<a name="l00614"></a>00614                 }
<a name="l00615"></a>00615                 $this-&gt;fetchMode = $mode;
<a name="l00616"></a>00616                 
<a name="l00617"></a>00617                 $this-&gt;_queryID = $id;
<a name="l00618"></a>00618                 
<a name="l00619"></a>00619                 <span class="comment">// the following is required for mysql odbc driver in 4.3.1 -- why?</span>
<a name="l00620"></a>00620                 $this-&gt;EOF = <span class="keyword">false</span>;
<a name="l00621"></a>00621                 $this-&gt;_currentRow = -1;
<a name="l00622"></a>00622                 <span class="comment">//$this-&gt;ADORecordSet($id);</span>
<a name="l00623"></a>00623         }
<a name="l00624"></a>00624 
<a name="l00625"></a>00625 
<a name="l00626"></a>00626         <span class="comment">// returns the field object</span>
<a name="l00627"></a><a class="code" href="classADORecordSet__odbc.html#3813bc438035cb5fb9c4bd4fcc5c8b84">00627</a>         function &amp;<a class="code" href="classADORecordSet__odbc.html#3813bc438035cb5fb9c4bd4fcc5c8b84">FetchField</a>($fieldOffset = -1) 
<a name="l00628"></a>00628         {
<a name="l00629"></a>00629                 
<a name="l00630"></a>00630                 $off=$fieldOffset+1; <span class="comment">// offsets begin at 1</span>
<a name="l00631"></a>00631                 
<a name="l00632"></a>00632                 $o= <span class="keyword">new</span> <a class="code" href="classADOFieldObject.html">ADOFieldObject</a>();
<a name="l00633"></a>00633                 $o-&gt;name = @odbc_field_name($this-&gt;_queryID,$off);
<a name="l00634"></a>00634                 $o-&gt;type = @odbc_field_type($this-&gt;_queryID,$off);
<a name="l00635"></a>00635                 $o-&gt;max_length = @odbc_field_len($this-&gt;_queryID,$off);
<a name="l00636"></a>00636                 <span class="keywordflow">if</span> (ADODB_ASSOC_CASE == 0) $o-&gt;name = strtolower($o-&gt;name);
<a name="l00637"></a>00637                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ADODB_ASSOC_CASE == 1) $o-&gt;name = strtoupper($o-&gt;name);
<a name="l00638"></a>00638                 <span class="keywordflow">return</span> $o;
<a name="l00639"></a>00639         }
<a name="l00640"></a>00640         
<a name="l00641"></a>00641         <span class="comment">/* Use associative array to get fields array */</span>
<a name="l00642"></a><a class="code" href="classADORecordSet__odbc.html#2b9c563d3cea34cc27d7c9cb1a5c2e9d">00642</a>         function <a class="code" href="classADORecordSet__odbc.html#2b9c563d3cea34cc27d7c9cb1a5c2e9d">Fields</a>($colname)
<a name="l00643"></a>00643         {
<a name="l00644"></a>00644                 <span class="keywordflow">if</span> ($this-&gt;fetchMode &amp; ADODB_FETCH_ASSOC) <span class="keywordflow">return</span> $this-&gt;fields[$colname];
<a name="l00645"></a>00645                 <span class="keywordflow">if</span> (!$this-&gt;bind) {
<a name="l00646"></a>00646                         $this-&gt;bind = array();
<a name="l00647"></a>00647                         <span class="keywordflow">for</span> ($i=0; $i &lt; $this-&gt;_numOfFields; $i++) {
<a name="l00648"></a>00648                                 $o = $this-&gt;<a class="code" href="classADORecordSet__odbc.html#3813bc438035cb5fb9c4bd4fcc5c8b84">FetchField</a>($i);
<a name="l00649"></a>00649                                 $this-&gt;bind[strtoupper($o-&gt;name)] = $i;
<a name="l00650"></a>00650                         }
<a name="l00651"></a>00651                 }
<a name="l00652"></a>00652 
<a name="l00653"></a>00653                  <span class="keywordflow">return</span> $this-&gt;fields[$this-&gt;bind[strtoupper($colname)]];
<a name="l00654"></a>00654         }
<a name="l00655"></a>00655         
<a name="l00656"></a>00656                 
<a name="l00657"></a><a class="code" href="classADORecordSet__odbc.html#8968fcf7f536e2ee9acb3d6309a170a8">00657</a>         function _initrs()
<a name="l00658"></a>00658         {
<a name="l00659"></a>00659         global $ADODB_COUNTRECS;
<a name="l00660"></a>00660                 $this-&gt;_numOfRows = ($ADODB_COUNTRECS) ? @odbc_num_rows($this-&gt;_queryID) : -1;
<a name="l00661"></a>00661                 $this-&gt;_numOfFields = @odbc_num_fields($this-&gt;_queryID);
<a name="l00662"></a>00662                 <span class="comment">// some silly drivers such as db2 as/400 and intersystems cache return _numOfRows = 0</span>
<a name="l00663"></a>00663                 <span class="keywordflow">if</span> ($this-&gt;_numOfRows == 0) $this-&gt;_numOfRows = -1;
<a name="l00664"></a>00664                 <span class="comment">//$this-&gt;useFetchArray = $this-&gt;connection-&gt;useFetchArray;</span>
<a name="l00665"></a>00665                 $this-&gt;_has_stupid_odbc_fetch_api_change = ADODB_PHPVER &gt;= 0x4200;
<a name="l00666"></a>00666         }       
<a name="l00667"></a>00667         
<a name="l00668"></a><a class="code" href="classADORecordSet__odbc.html#aeeb3d93c8910e6515e1f9c71ffc3ca8">00668</a>         function _seek($row)
<a name="l00669"></a>00669         {
<a name="l00670"></a>00670                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00671"></a>00671         }
<a name="l00672"></a>00672         
<a name="l00673"></a>00673         <span class="comment">// speed up SelectLimit() by switching to ADODB_FETCH_NUM as ADODB_FETCH_ASSOC is emulated</span>
<a name="l00674"></a><a class="code" href="classADORecordSet__odbc.html#6b7157ae088c0b3162991cdfe8fa719d">00674</a>         function &amp;GetArrayLimit($nrows,$offset=-1) 
<a name="l00675"></a>00675         {
<a name="l00676"></a>00676                 <span class="keywordflow">if</span> ($offset &lt;= 0) {
<a name="l00677"></a>00677                         $rs =&amp; $this-&gt;GetArray($nrows);
<a name="l00678"></a>00678                         <span class="keywordflow">return</span> $rs;
<a name="l00679"></a>00679                 }
<a name="l00680"></a>00680                 $savem = $this-&gt;fetchMode;
<a name="l00681"></a>00681                 $this-&gt;fetchMode = ADODB_FETCH_NUM;
<a name="l00682"></a>00682                 $this-&gt;Move($offset);
<a name="l00683"></a>00683                 $this-&gt;fetchMode = $savem;
<a name="l00684"></a>00684                 
<a name="l00685"></a>00685                 <span class="keywordflow">if</span> ($this-&gt;fetchMode &amp; ADODB_FETCH_ASSOC) {
<a name="l00686"></a>00686                         $this-&gt;fields =&amp; $this-&gt;GetRowAssoc(ADODB_ASSOC_CASE);
<a name="l00687"></a>00687                 }
<a name="l00688"></a>00688                 
<a name="l00689"></a>00689                 $results = array();
<a name="l00690"></a>00690                 $cnt = 0;
<a name="l00691"></a>00691                 <span class="keywordflow">while</span> (!$this-&gt;EOF &amp;&amp; $nrows != $cnt) {
<a name="l00692"></a>00692                         $results[$cnt++] = $this-&gt;fields;
<a name="l00693"></a>00693                         $this-&gt;MoveNext();
<a name="l00694"></a>00694                 }
<a name="l00695"></a>00695                 
<a name="l00696"></a>00696                 <span class="keywordflow">return</span> $results;
<a name="l00697"></a>00697         }
<a name="l00698"></a>00698         
<a name="l00699"></a>00699         
<a name="l00700"></a><a class="code" href="classADORecordSet__odbc.html#812841e79713c77e35ebdcfac71e3583">00700</a>         function MoveNext() 
<a name="l00701"></a>00701         {
<a name="l00702"></a>00702                 <span class="keywordflow">if</span> ($this-&gt;_numOfRows != 0 &amp;&amp; !$this-&gt;EOF) {            
<a name="l00703"></a>00703                         $this-&gt;_currentRow++;
<a name="l00704"></a>00704                         
<a name="l00705"></a>00705                         <span class="keywordflow">if</span> ($this-&gt;_has_stupid_odbc_fetch_api_change)
<a name="l00706"></a>00706                                 $rez = @odbc_fetch_into($this-&gt;_queryID,$this-&gt;fields);
<a name="l00707"></a>00707                         <span class="keywordflow">else</span> {
<a name="l00708"></a>00708                                 $row = 0;
<a name="l00709"></a>00709                                 $rez = @odbc_fetch_into($this-&gt;_queryID,$row,$this-&gt;fields);
<a name="l00710"></a>00710                         }
<a name="l00711"></a>00711                         <span class="keywordflow">if</span> ($rez) {
<a name="l00712"></a>00712                                 <span class="keywordflow">if</span> ($this-&gt;fetchMode &amp; ADODB_FETCH_ASSOC) {
<a name="l00713"></a>00713                                         $this-&gt;fields =&amp; $this-&gt;GetRowAssoc(ADODB_ASSOC_CASE);
<a name="l00714"></a>00714                                 }
<a name="l00715"></a>00715                                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00716"></a>00716                         }
<a name="l00717"></a>00717                 }
<a name="l00718"></a>00718                 $this-&gt;fields = <span class="keyword">false</span>;
<a name="l00719"></a>00719                 $this-&gt;EOF = <span class="keyword">true</span>;
<a name="l00720"></a>00720                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00721"></a>00721         }       
<a name="l00722"></a>00722         
<a name="l00723"></a><a class="code" href="classADORecordSet__odbc.html#e124131d69e604274e0d6e9776407339">00723</a>         function _fetch()
<a name="l00724"></a>00724         {
<a name="l00725"></a>00725 
<a name="l00726"></a>00726                 <span class="keywordflow">if</span> ($this-&gt;_has_stupid_odbc_fetch_api_change)
<a name="l00727"></a>00727                         $rez = @odbc_fetch_into($this-&gt;_queryID,$this-&gt;fields);
<a name="l00728"></a>00728                 <span class="keywordflow">else</span> {
<a name="l00729"></a>00729                         $row = 0;
<a name="l00730"></a>00730                         $rez = @odbc_fetch_into($this-&gt;_queryID,$row,$this-&gt;fields);
<a name="l00731"></a>00731                 }
<a name="l00732"></a>00732                 <span class="keywordflow">if</span> ($rez) {
<a name="l00733"></a>00733                         <span class="keywordflow">if</span> ($this-&gt;fetchMode &amp; ADODB_FETCH_ASSOC) {
<a name="l00734"></a>00734                                 $this-&gt;fields =&amp; $this-&gt;GetRowAssoc(ADODB_ASSOC_CASE);
<a name="l00735"></a>00735                         }
<a name="l00736"></a>00736                         <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00737"></a>00737                 }
<a name="l00738"></a>00738                 $this-&gt;fields = <span class="keyword">false</span>;
<a name="l00739"></a>00739                 <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00740"></a>00740         }
<a name="l00741"></a>00741         
<a name="l00742"></a><a class="code" href="classADORecordSet__odbc.html#25bf2058266398004e8a59cb3d0ae894">00742</a>         function _close() 
<a name="l00743"></a>00743         {
<a name="l00744"></a>00744                 <span class="keywordflow">return</span> @odbc_free_result($this-&gt;_queryID);              
<a name="l00745"></a>00745         }
<a name="l00746"></a>00746 
<a name="l00747"></a>00747 }
<a name="l00748"></a>00748 ?&gt;
</pre></div><?php
  include_once '../doc-typo3-funcs.php';
  get_footer();
?>