<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.sqlsrv-fetch-array" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <refnamediv>
  <refname>sqlsrv_fetch_array</refname>
  <refpurpose>Returns a row as an array</refpurpose>
 </refnamediv>
 <refsect1 role="description">
  &reftitle.description;
  <methodsynopsis>
   <type>array</type><methodname>sqlsrv_fetch_array</methodname>
   <methodparam><type>resource</type><parameter>stmt</parameter></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>fetchType</parameter></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>row</parameter></methodparam>
   <methodparam choice="opt"><type>int</type><parameter>offset</parameter></methodparam>
  </methodsynopsis>
  <para>
   Returns the next available row of data as an associative array, a numeric 
   array, or both (the default).
  </para>
 </refsect1>
 
 <refsect1 role="parameters">
  &reftitle.parameters;
  <para>
   <variablelist>
    <varlistentry>
     <term><parameter>stmt</parameter></term>
     <listitem>
      <para>
       A statement resource returned by sqlsrv_query or sqlsrv_execute.
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>fetchType</parameter></term>
     <listitem>
      <para>
       A predefined constant specifying the type of array to return. Possible 
       values are <constant>SQLSRV_FETCH_ASSOC</constant>, 
       <constant>SQLSRV_FETCH_NUMERIC</constant>, and 
       <constant>SQLSRV_FETCH_BOTH</constant> (the default).
      </para>
      <para>
      A fetch type of SQLSRV_FETCH_ASSOC should not be used when consuming a 
      result set with multiple columns of the same name.
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>row</parameter></term>
     <listitem>
      <para>
       Specifies the row to access in a result set that uses a scrollable cursor. 
       Possible values are <constant>SQLSRV_SCROLL_NEXT</constant>, 
       <constant>SQLSRV_SCROLL_PRIOR</constant>, <constant>SQLSRV_SCROLL_FIRST</constant>, 
       <constant>SQLSRV_SCROLL_LAST</constant>, <constant>SQLSRV_SCROLL_ABSOLUTE</constant> and, 
       <constant>SQLSRV_SCROLL_RELATIVE</constant> (the default). When this parameter 
       is specified, the <parameter>fetchType</parameter> must be explicitly defined.
      </para>
     </listitem>
    </varlistentry>
    <varlistentry>
     <term><parameter>offset</parameter></term>
     <listitem>
      <para>
       Specifies the row to be accessed if the row parameter is set to
       <constant>SQLSRV_SCROLL_ABSOLUTE</constant> or
       <constant>SQLSRV_SCROLL_RELATIVE</constant>. Note that the first row in
       a result set has index 0.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </refsect1>
 
 <refsect1 role="returnvalues">
  &reftitle.returnvalues;
  <para>
   Returns an array on success, &null; if there are no more rows to return, and 
   &false; if an error occurs.
  </para>
 </refsect1>
 
 <refsect1 role="examples">
  &reftitle.examples;
  <para>
   <example>
    <title>Retrieving an associative array.</title>
    <programlisting role="php">
<![CDATA[
<?php
$serverName = "serverName\instanceName";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}

$sql = "SELECT FirstName, LastName FROM SomeTable";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      echo $row['LastName'].", ".$row['FirstName']."<br />";
}

sqlsrv_free_stmt( $stmt);
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   <example>
    <title>Retrieving a numeric array.</title>
    <programlisting role="php">
<![CDATA[
<?php
$serverName = "serverName\instanceName";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo );
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}

$sql = "SELECT FirstName, LastName FROM SomeTable";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) {
      echo $row[0].", ".$row[1]."<br />";
}

sqlsrv_free_stmt( $stmt);
?>
]]>
    </programlisting>
   </example>
  </para>
 </refsect1>

 <refsect1 role="notes">
  &reftitle.notes;
  <para>
   Not specifying the <parameter>fetchType</parameter> or explicity using the 
   <constant>SQLSRV_FETCH_TYPE</constant> constant in the examples above will 
   return an array that has both associative and numeric keys. 
  </para>
  <para>
   If more than one column is returned with the same name, the last column will 
   take precedence. To avoid field name collisions, use aliases. 
  </para>
  <para>
  If a column with no name is returned, the associative key for the array element 
  will be an empty string ("").
  </para>
 </refsect1>
 
 <refsect1 role="seealso">
  &reftitle.seealso;
  <para>
   <simplelist>
    <member><function>sqlsrv_connect</function></member>
    <member><function>sqlsrv_query</function></member>
    <member><function>sqlsrv_errors</function></member>
    <member><function>sqlsrv_fetch</function></member>
   </simplelist>
  </para>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->