title: Handle CLOB columns with PHP-ODBC
body: <p>I maintain a legacy application that runs on PHP/5.2.6 under Windows Server 2003 and connects to a remote Oracle 10g server through ODBC. I'm writing a new feature that needs a CLOB column so it can store arbitrarily large texts but I can't find the way to manipulate it via good old ODBC functions.</p>
  
  <p>For writing, I've tried this approach:</p>
  
  <pre><code>&lt;?php
  
  $sql = 'INSERT INTO FOO (FOO_ID, FOO_CLOB) VALUES (?, ?)';
  $stmt = odbc_prepare($conn, $sql);
  $res = odbc_execute($stmt, array(1, 'Very large string'));
  
  ?&gt;
  </code></pre>
  
  <p>But as soon as the string is larger than 4,000 bytes:</p>
  
  <blockquote>
    <p>SQL error: [Microsoft][ODBC driver for
    Oracle]Error en el parámetro 2: Datos
    truncados, SQL state 01004 in
    SQLExecute</p>
  </blockquote>
  
  <p>... which roughly means "Truncated data". I have a similar problem when reading: it works fine until I receive more than 4,000 bytes.</p>
  
  <p>Is it possible to manipulate a CLOB column with more than 4,000 bytes using PHP ODBC functions?</p>
  
  <p><em>(My alternative is to store stuff in files and only save the file path on DB but I'd like to avoid that if possible.)</em></p>
  
  <hr>
  
  <p><strong>Update:</strong> Following <a href="https://stackoverflow.com/questions/5549196/handle-clob-columns-with-php-odbc/5549394#5549394">Justin Cave's advice</a>, I've dumped Microsoft's ODBC Driver in favour of Oracle's and my code inserts large strings without changes. My question now is how to read the CLOB column. Reading it as-is:</p>
  
  <pre><code>$sql = 'SELECT FOO_ID, FOO_CLOB FROM FOO';
  $res = odbc_exec($conn, $sql);
  while($row = odbc_fetch_array($res)){
      // ...
  }
  </code></pre>
  
  <p>... triggers this when running <code>odbc_fetch_array()</code>:</p>
  
  <blockquote>
    <p>ORA-01861: literal does not match
    format string</p>
  </blockquote>