Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:5960 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 95806 invoked by uid 1010); 1 Dec 2003 22:52:50 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 95782 invoked from network); 1 Dec 2003 22:52:49 -0000 Received: from unknown (HELO web13405.mail.yahoo.com) (216.136.175.63) by pb1.pair.com with SMTP; 1 Dec 2003 22:52:49 -0000 Message-ID: <20031201225249.72283.qmail@web13405.mail.yahoo.com> Received: from [24.215.130.244] by web13405.mail.yahoo.com via HTTP; Mon, 01 Dec 2003 14:52:49 PST Date: Mon, 1 Dec 2003 14:52:49 -0800 (PST) To: "Frank M. Kromann" Cc: internals@lists.php.net In-Reply-To: <10703053474400000@9866357972520000.9866341568840000> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [PHP-DEV] [FIX] Bug #25585: PHP crash if executed MSSQL-query with RAISERROR() call and error 515 From: msisolak@yahoo.com (Michael Sisolak) References: <10703053474400000@9866357972520000.9866341568840000> Frank, Hummm... I am seeing the crash on my development machine. Using PHP 4.3.4 recompiled with the most recent php_mssql.c (1.86.2.26) this code fails for me exactly as descibed in the bug report when run with the CLI under Windows 2000 Professional. I'm running SQL Server 2000 SP3 with version 8.00.194 of ntwdblib.dll. What is your configuration? Michael --- "Frank M. Kromann" wrote: > This does not fix the problem. > > mssql_query is designed to stop fetching for each result. Use > mssql_next_result() to move the internal pointer to the nex result > and > process the data. > > I have tested the code provided with the bug report and it works as I > expect (no crash). > > - Frank > > > I believe the problem here is in how mssql_query handles result > sets > > that have multiple results returned, but none with rows (such as in > > this bug where there are multiple commands executed and multiple > errors > > returned). In the php_mssql.c for PHP 4.3.4 the block at line 1145 > > reads: > > > > while ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && retvalue > == > > SUCCEED) { > > retvalue = dbresults(mssql_ptr->link); > > } > > > > According to Microsoft > > > (http://msdn.microsoft.com/library/en-us/dblibc/dbc_pdc04e_52sz.asp), > > however: > > > > "You must call dbresults until it returns NO_MORE_RESULTS, or > > any continued use of the DBPROCESS causes the DB-Library error > > 10038 'Results Pending'." > > > > As this code in php_mssql.c currently stands it stops looping the > empty > > result sets too early becuase it's looking for SUCCEED instead of > > NO_MORE_RESULTS. Changing this code to: > > > > while ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && retvalue > != > > NO_MORE_RESULTS) { > > retvalue = dbresults(mssql_ptr->link); > > } > > > > causes both SQL Server error messages generated by the sample query > in > > the bug report to be correctly displayed and eliminates the fault. > > > > Michael Sisolak > > msisolak@yahoo.com > > > > > > __________________________________ > > Do you Yahoo!? > > Free Pop-Up Blocker - Get it now > > http://companion.yahoo.com/ > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > __________________________________ Do you Yahoo!? Free Pop-Up Blocker - Get it now http://companion.yahoo.com/