Hi all. I've a question regarding PHP's ODBC support. Here's the situation: We've a PHP app that uses ODBC to talk to a MS SQL server. Its original home was on a server that used the OpenLink ODBC driver, which was a POS, so we build an abstraction wrapper around the subset of PHP's ODBC functions that we were able to use to make it usable. The internal code for a query is built on odbc_exec, odbc_fetch_row, and odbc_result. The main interesting part is that the original driver didn't allow for named results, so instead we have a small string parser that reads the incoming SQL query, extracts the field names, and then uses that to map the numeric result indexes to their field name. Kinda clunky, but worked well and used only a minimal ODBC footprint. That worked fine on their old system. However, the client then moved from a Windows IIS server to Apache and PHP 5.1.6 on a Linux box, but still talking to an MS SQL server on a Windows box. We migrated our test environment to the same; Linux/Apache/PHP 5.1 talking to MS SQL on a Windows box over the network. Our system uses the unix_ODBC and freetds stack for ODBC connectivity, and that works fine. On the client's system, it works fine except for a few odd cases. Specifically, on a few queries that pull data from large text fields the query may hang. It seems to reliably hang on certain records only, and only after those records have been edited. It seems that when updating a record, there is a small chance of something happening to that record and it then not working thereafter. A PHP test script run from the command line freezes, while the same query run directly on the SQL server returns almost instantly. The client has been in contact with their ODBC driver vendor (they're using a commercial driver), and the vendor's response is that we're not using ODBC correctly. Specifically, they say: ----- I followed the ODBC calls in your odbc trace file and I got error "Invalid Descriptor Index" on SQLGetData as well. I know we normally don't handle the retrieval of large dataset like Text using SQLGetData as your application is doing. I'm in the research of whether the way your application does is valid or not. ----- They then followed up with: ----- We have done some research on this issue. We realized that your application is binding all the columns for the resultset and then use SQLGetData. This is not the correct way to do. You can either use bind column for result set and then print out the data in the bound buffer, or use SQLGetData to get the unbound resultset. ----- They then include some sample code that is all in C. Now I'll be honest and say I don't quite follow what they're talking about. I do not claim to be an ODBC guru, but SQLGetData is a lower-level operation, SQL level or C level I don't know, but not something that happens in PHP code as far as I am aware. Are they saying there's a bug in PHP's odbc_fetch_row()? Or is it a bug in their driver if it can't handle whatever it is odbc_fetch_row() does internally? Or should we be using odbc_result() instead of odbc_fetch_row() if we're dealing with a text field rather than a varchar or int? I am confused, and would appreciate assistance in becoming less confused. :-) Thanks. -- Larry Garfield AIM: LOLG42 larry@xxxxxxxxxxxxxxxx ICQ: 6817012 "If nature has made any one thing less susceptible than all others of exclusive property, it is the action of the thinking power called an idea, which an individual may exclusively possess as long as he keeps it to himself; but the moment it is divulged, it forces itself into the possession of every one, and the receiver cannot dispossess himself of it." -- Thomas Jefferson -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php