no real answer, but ...

Larry Garfield wrote:
> 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.

...

> 
> 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?  

the way I read it odbc_result() is just an alternative way of doing what you
do with odbc_fetch_row() - I can't see any reason why doing it with 
odbc_result()
would suddenly make it work - nonetheless it might be worth trying it just to 
rule
it out.

with regard to wanting results returned in a 'named' fashion, does the new 
setup still
not allow use of odbc_fetch_array() instead of odbc_fetch_row()? not that I see 
any logic
in that solving the issue, again it might be worth trying to see if it does.

I don't know much about MSSQL, or whether 'text' is an actual field type, but 
maybe
this function offers a wayout?:

        http://php.net/manual/en/function.odbc-binmode.php

are the php versions on the 2 systems you mention exactly the same? (you
mention 5.1 and 5.1.6) this could be a clue to the problem.

lastly I don't suppose that it possible for you to switch to using the MSSQL
specific php extension? [http://php.net/mssql] it might offer a better/faster 
connection
to the MSSQL server as well as making the issue go away.

> 
> I am confused, and would appreciate assistance in becoming less confused. :-) 
>  
> Thanks.
> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to