Bug #43844 [Opn->Fbk]: muliple odbc_execute() on prepared select statement with bind parms (IBM ODBC)

From: Date: Thu, 01 Oct 2020 12:04:30 +0000
Subject: Bug #43844 [Opn->Fbk]: muliple odbc_execute() on prepared select statement with bind parms (IBM ODBC)
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-229302@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=43844&edit=1 ID: 43844 Updated by: cmb@php.net Reported by: kennya at carlislefsp dot com Summary: muliple odbc_execute() on prepared select statement with bind parms (IBM ODBC) -Status: Open +Status: Feedback Type: Bug Package: ODBC related Operating System: Debian Linux 4.0 PHP Version: 5.2.5 -Assigned To: +Assigned To: cmb Block user comment: N Private report: N New Comment: I cannot reproduce that (different driver, though), but I can imagine that this issue has been fixed in the meantime, or can anybody else still reproduce this with any of the actively supported PHP versions[1]? [1] <https://www.php.net/supported-versions.php> Previous Comments: ------------------------------------------------------------------------ [2008-01-14 18:29:24] kennya at carlislefsp dot com Description: ------------ OS: Debian Linux 4.0 PHP: 5.2.0-8+etch9 and 5.2.25 unixODBC: 2.2.11-13 ODBC Driver: IBM iSeries Access for Linux V5R4, Version 1.4 Second execution of a prepared select statement with bind parameters fails. Through trial and error, I found that it'll actually work if I: #1) don't define any variables between odbc_execute() #2) cycle through all of the results OR comment out the SQLFreeStmt(.. SQL_RESET_PARAMS) in ext/odbc/php_odbc.c line #1102, ie: --cut-- if (result->numparams > 0) { /* SQLFreeStmt(result->stmt, SQL_RESET_PARAMS); */ for(i = 0; i < result->numparams; i++) { if (params[i].fp != -1) close(params[i].fp); } efree(params); } --cut-- I'm not a C guy. I figure the above is present for a reason, I've just noticed that removing it fixes this problem for this version of of the IBM ODBC/DB2 driver. Reproduce code: --------------- $conn = odbc_connect('host','user','pass'); $stmt='select cn from ldapusr where cn like ?'; $res =odbc_prepare($conn, $stmt); if (! odbc_execute($res, array('%ken%'))) { trigger_error(odbc_error($conn) . ': ' . odbc_errormsg($conn), E_USER_ERROR); } if (odbc_fetch_row($res)) { print odbc_result($res, 1) . "\n"; } //$anything='asdf'; // add this and it stops working while (odbc_fetch_row($res)) {} // remove this and it stops working print 'Second:\n'; if (! odbc_execute($res, array('%steve%'))) { trigger_error(odbc_error($conn) . ': ' . odbc_errormsg($conn), E_USER_ERROR); } if (odbc_fetch_row($res)) { print odbc_result($res, 1) . "\n"; } Expected result: ---------------- records Actual result: -------------- 07001: [unixODBC][IBM][iSeries Access ODBC Driver]Wrong number of parameters. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=43844&edit=1

« previous php.bugs (#229302) next »