RE: [PHP-DOC] #25917 [Opn->Ana]: odbc_error() sometimes returns a bad string
| From: | Customer Service | Date: | Fri, 31 Oct 2003 14:39:10 +0000 |
| Subject: | RE: [PHP-DOC] #25917 [Opn->Ana]: odbc_error() sometimes returns a bad string | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969356779@lists.php.net to get a copy of this message | ||
PLEASE REMOVE OUR ADDRESS FROM THIS LIST!!!
***CONFIDENTIALITY NOTICE: This communication is considered a private and proprietary exchange
between Gibson Musical Instruments and its customers, and is intended for the eyes of the original
recipient(s) only. This e-mail message, including any attachments, is for the sole use of the
intended recipient(s) and may contain confidential and privileged information. Any unauthorized
review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please
contact the sender by reply e-mail and destroy all copies of the original message. ***
-----Original Message-----
From: kalowsky@php.net [mailto:kalowsky@php.net]
Sent: Friday, October 31, 2003 8:35 AM
To: phpdoc@lists.php.net
Subject: [PHP-DOC] #25917 [Opn->Ana]: odbc_error() sometimes returns a bad string
ID: 25917
Updated by: kalowsky@php.net
Reported By: thorsten at rinne dot info
-Status: Open
+Status: Analyzed
-Bug Type: ODBC related
+Bug Type: Documentation problem
Operating System: Windows2000
PHP Version: 4CVS, 5CVS
New Comment:
This is probably a documentation bug (and therefore a
misunderstanding on your code) more than a PHP ODBC
code bug.
What you're seeing happening is an abuse of the
odbc_error system really. The odbc_error values are
only populated when an internal error is detected (i.e.
SQLExecDirect() fails). The catch is they only over-
write the values that had been in there previously. As
such the each connections last error is never really
free'd, so you'll constantly get a copy of the last
seen error. Does that make sense?
In any case you should be checking the return code for
the function you're calling rather than just
odbc_error().
Moving to a documentation bug.
Previous Comments:
------------------------------------------------------------------------
[2003-10-27 02:28:59] thorsten at rinne dot info
Here's my log:
SQLQuery: SELECT * FROM TABLE
ErrorNum: 4ÃïÏ
ErrorMsg: ï
Here's the odbc log:
[ Process: 924, Thread: 1084 ]
[ Date & Time: 27/10/2003 08.23.23.000015 ]
[ Product: QDB2/NT DB2 v8.1.3.132 ]
[ Level Identifier: 02040106 ]
[ CLI Driver Version: 08.01.0000 ]
[ Informational Tokens: "DB2
v8.1.3.132","s030728","WR21324","Fixpack
3" ]
[0000000924 0000001084] [27/10/2003 08.23.36.934791] SQLExecDirectW( hStmt=1:1,
pszSqlStr="SELECT * FROM TABLE" -
X"530045004C004500430054002000490044005F004D00410049004C0052004F004F004D002C0020004400450053004300520049005000540049004F004E002C0020005300450052005600450052004E0041004D0045002000460052004F004D0020004D00410049004C0052004F004F004D00",
cbSqlStr=-3 )
[0000000924 0000001084] [27/10/2003 08.23.36.935123]
[0000000924 0000001084] [27/10/2003 08.23.36.935863] SQLExecDirectW( )
[0000000924 0000001084] [27/10/2003 08.23.36.935972] <---
SQL_SUCCESS
------------------------------------------------------------------------
[2003-10-22 19:49:26] kalowsky@php.net
can you please turn on the logging option in your client, and post the relavent portions to this
bug? Under windows it's in the ODBC Administrator.
------------------------------------------------------------------------
[2003-10-22 08:32:47] thorsten at rinne dot info
This bug can also reproduced with PHP 4.3.4RC1 and 4.3.4RC2. This happens with INSERTS, UPDATEs and
DELETEs, too.
------------------------------------------------------------------------
[2003-10-20 03:49:22] thorsten at rinne dot info
Description:
------------
We use IBM DB2 databases on our Windows2000 systems. The bug occured then writing a database class.
The odbc_error() function returns sometimes bad strings with special characters. If a real error
occurs, the function returns the correct six-digit ODBC state. After that, the error code will not
be removed from memory and the error code will be returned on every query although it is correct.
Note:
var_dump(odbc_error()) returns sometimes bad strings with special characters, sometimes nothing.
Reproduce code:
---------------
function myquery($query) {
$result = odbc_exec($conn, $query);
if (odbc_error($conn)) {
print "SQLQuery: ".$query;
print "ErrorNum: ".odbc_error($conn));
print "ErrorMsg: ".odbc_errormsg($conn));
}
return $result;
}
Expected result:
----------------
The expected result should be empty when no error occured and the six-digit ODBC state when an error
occured. After every correct new query, the result should be empty.
Actual result:
--------------
Here are some results, the queries are correct:
SQLQuery: SELECT * FROM SYSTEM
ErrorNum: 8¸ÌP·
ErrorMsg: Ìx¹Ì
or
SQLQuery: SELECT * FROM SYSTEM2
ErrorNum: àW
PW
ErrorMsg:
or
SQLQuery: SELECT * FROM SYSTEM
ErrorNum:
ErrorMsg:
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=25917&edit=1