php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #23146 odbc_result column 1 empty after first use
Submitted: 2003-04-10 04:04 UTC Modified: 2003-08-21 00:00 UTC
From: wohlfarth dot m at web dot de Assigned:
Status: No Feedback Package: ODBC related
PHP Version: 4.3.2-RC OS: Win2k SP2
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2003-04-10 04:04 UTC] wohlfarth dot m at web dot de
$idresult2 = odbc_exec($iddb, $sqlqry2);
odbc_fetch_row($idresult2);

// Column 1 contains a string
if ( odbc_result($idresult2, 1) <> "" ) {
   // Column 1 is now empty
   echo odbc_result($idresult2, 1);
};

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-04-23 05:20 UTC] wohlfarth dot m at web dot de
Here still a few information to the problem:
- Database: Sybase Anywhere Version 7
- Webserver: Apache 2.0 with OpenSSL
- ODBC: Version 3.520

In the meantime I found still out that the problem arises, if the column from a Subquery were 

produced.

Query sample:
select distinct a.column1, a.column2,

(select List(b.column1) from Table2 as b 
where b.Prim = a.Prim) as ListColumn

from Table1 as a
where a.Prim = 1
 [2003-04-23 11:10 UTC] kalowsky@php.net
Don't mind sniper, he's a little over-zealous with the bogus-ification.  You're correct though that SELECT DISTINCT does create problems with the ODBC system at the moment.  I haven't yet been able to figure out why.

Any chance you can create a log of the SQL transactions (SQL Log option on your ODBC Administrator) and post it here?
 [2003-04-24 03:22 UTC] wohlfarth dot m at web dot de
Complete Logfile is very long, here is the part of interest:

                750-b24	ENTER SQLGetData 
		HSTMT               00EC1DB0
		UWORD                        9 
		SWORD                        1 <SQL_C_CHAR>
		PTR                 0x053E8620 
		SQLLEN                  4096
		SQLLEN *            0x0595C5E4

                750-b24	EXIT  SQLGetData  with return code 0 (SQL_SUCCESS)
		HSTMT               00EC1DB0
		UWORD                        9 
		SWORD                        1 <SQL_C_CHAR>
		PTR                 0x053E8620 [      11] "521 (70074)" --> first odbc_result here
		SQLLEN                  4096
		SQLLEN *            0x0595C5E4 (11)

                750-b24	ENTER SQLGetData 
		HSTMT               00EC1DB0
		UWORD                        9 
		SWORD                        1 <SQL_C_CHAR>
		PTR                 0x053E9638 
		SQLLEN                  4096
		SQLLEN *            0x0595C5E4

                750-b24	EXIT  SQLGetData  with return code 100 (SQL_NO_DATA_FOUND) --> ERROR here ???
		HSTMT               00EC1DB0
		UWORD                        9 
		SWORD                        1 <SQL_C_CHAR>
		PTR                 0x053E9638 
		SQLLEN                  4096
		SQLLEN *            0x0595C5E4

                750-b24	ENTER SQLExtendedFetch 
		HSTMT               00EC1DB0
		UWORD                        1 <SQL_FETCH_NEXT>
		SQLROWOFFSET               1
		SQLROWSETSIZE *     0x0520F318
		UWORD *             0x0520F320

                750-b24	EXIT  SQLExtendedFetch  with return code 0 (SQL_SUCCESS)
		HSTMT               00EC1DB0
		UWORD                        1 <SQL_FETCH_NEXT>
		SQLROWOFFSET               1
		SQLROWSETSIZE *     0x0520F318 (1)
		UWORD *             0x0520F320 (0)
 [2003-04-24 07:41 UTC] kalowsky@php.net
Just to make sure, this is using the example you've posted above, not some deviation, right?
 [2003-05-26 03:15 UTC] wohlfarth dot m at web dot de
Please apology for the long waiting period...

Right !

I learned in the meantime that this can be produced in different ways. I could cause the effect with List(ColumnX) and with a Subquery as column. I suppose the error occurs, when the fieldtype is not defined by a field from a table of the database.
 [2003-05-26 03:55 UTC] wohlfarth dot m at web dot de
Supplement...

The error occures by:
"SELECT List(ColumnX) as IDENT from TableA"

you can bypass the problem when doing the following:
"SELECT cast(List(Column) as varchar(1000)) as IDENT from TableA"

Samplecode:
<?php

echo "Connect to database...";

$iddb = odbc_connect('db1','user1','user1');
echo "OK<br>";

if ( $iddb == 0 ) {
   echo "Error: Cannot connect to database.";
   exit;
};

$sqlqry = "select List(ColumnA) as ColumnX from TableA";

echo "<hr>$sqlqry<br>";

$idresult = odbc_exec($iddb, $sqlqry);

$qryeof = odbc_fetch_row($idresult);
if ( !$qryeof ) {
    echo "no result";
} else {
    echo "Version 1 / Result 1: " . odbc_result($idresult, "ColumnX") . "<br><br>";
    echo "Version 1 / Result 2: " . odbc_result($idresult, "ColumnX") . "<br><br>";
};

$sqlqry = "select cast(List(ColumnA) as varchar(1000)) as ColumnX from TableA";

echo "<hr>$sqlqry<br>";

$idresult = odbc_exec($iddb, $sqlqry);

$qryeof = odbc_fetch_row($idresult);
if ( !$qryeof ) {
    echo "no result";
} else {
    echo "Version 2 / Result 1: " . odbc_result($idresult, "ColumnX") . "<br><br>";
    echo "Version 2 / Result 2: " . odbc_result($idresult, "ColumnX") . "<br><br>";
};

odbc_close($iddb);

?>

Result of Samplecode:
Connect to database...OK

------------------------------------------------------------
select List(ColumnA) as ColumnX from TableA
Version 1 / Result 1: res1,res2,res3

Version 1 / Result 2: 


------------------------------------------------------------
select cast(List(ColumnA) as VarChar(1000)) as ColumnX from TableA
Version 2 / Result 1: res1,res2,res3

Version 2 / Result 2: res1,res2,res3
 [2003-08-21 00:00 UTC] sniper@php.net
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.


 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Mon May 10 19:01:24 2021 UTC