php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #58056 db2_execute failure
Submitted: 2008-02-23 19:20 UTC Modified: 2009-03-03 05:37 UTC
From: the_dude61 at hotmail dot com Assigned:
Status: Closed Package: ibm_db2 (PECL)
PHP Version: 5.2.1 OS: openSUSE 10.2
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: the_dude61 at hotmail dot com
New email:
PHP Version: OS:

 

 [2008-02-23 19:20 UTC] the_dude61 at hotmail dot com
Description:
------------
Problem relates to ibm_db2-1.6.5 and DB2 v9.5.0.0 LINUXAMD6495.

I called a stored procedure with a blob parameter as follows:

    $stmt = db2_prepare($conn, $sqlcmd);
    $par_inid = 0;
    $par_indata = "00000000001111111111";
    $par_outrc = 0;
    db2_bind_param($stmt, 1, "par_inid", DB2_PARAM_IN);
    db2_bind_param($stmt, 2, "par_indata", DB2_PARAM_IN,DB2_BINARY);
    db2_bind_param($stmt, 3, "par_outrc", DB2_PARAM_OUT);
    if (db2_execute($stmt) )
      <ok>
    else
      <error>

The DB2 stored procedure raises an error with [IBM][CLI
Driver][DB2/LINUXX8664] SQL0438N  Application raised error with
diagnostic text: "Id not found".  SQLSTATE=77100.

But the db2_execute() function returns TRUE as if it was successfull.

I added some missing error handling code in ibm_db2.c - db2_execute() to
get the correct behaviour (see code below). The while loop did not
handle a SQL_ERROR of SQLParamData() as it occurs in my case. My case
was that the SQLExecute() requested one more data packet
(SQL_NEED_MORE). The next call to SQLParamData() within the while-loop
returned a sql error raised by the application because of an invalid id.
This error was not covered and db2_execute() returned with TRUE
(=successful).

Modified code (starts at line# 3277):

if ( rc == SQL_NEED_DATA ) {
	while ( (rc = SQLParamData((SQLHSTMT)stmt_res->hstmt, (SQLPOINTER
*)&valuePtr)) == SQL_NEED_DATA ) {
		/* passing data value for a parameter */
		rc = SQLPutData((SQLHSTMT)stmt_res->hstmt,
(SQLPOINTER)(((zvalue_value*)valuePtr)->str.val),
((zvalue_value*)valuePtr)->str.len);
		if ( rc == SQL_ERROR ) {
			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Sending data failed");
			_php_db2_check_sql_errors(stmt_res->hstmt, SQL_HANDLE_STMT, rc, 1,
NULL, -1, 1 TSRMLS_CC);
			RETVAL_FALSE;
		}
	}
	if ( rc == SQL_ERROR ) {
		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Statement Execute
Failed");
		_php_db2_check_sql_errors(stmt_res->hstmt, SQL_HANDLE_STMT, rc, 1,
NULL, -1, 1 TSRMLS_CC);
		RETVAL_FALSE;
	}
	
}


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-03-11 11:34 UTC] opendev at us dot ibm dot com
An internal bug has been opened against ibm_db2 driver.
 [2009-03-03 05:37 UTC] abhargav at in dot ibm dot com
This has been fixed in 1.7.0 release.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Jul 13 11:01:33 2025 UTC