From: kennya at carlislefsp dot com
Operating system: Debian Linux 4.0
PHP version: 5.2.5
PHP Bug Type: ODBC related
Bug description: muliple odbc_execute() on prepared select statement with bind
parms (IBM ODBC)
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 bug report at http://bugs.php.net/?id=43844&edit=1
--
Try a CVS snapshot (PHP 4.4):
http://bugs.php.net/fix.php?id=43844&r=trysnapshot44
Try a CVS snapshot (PHP 5.2):
http://bugs.php.net/fix.php?id=43844&r=trysnapshot52
Try a CVS snapshot (PHP 5.3):
http://bugs.php.net/fix.php?id=43844&r=trysnapshot53
Try a CVS snapshot (PHP 6.0):
http://bugs.php.net/fix.php?id=43844&r=trysnapshot60
Fixed in CVS: http://bugs.php.net/fix.php?id=43844&r=fixedcvs
Fixed in release:
http://bugs.php.net/fix.php?id=43844&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=43844&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=43844&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=43844&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=43844&r=support
Expected behavior: http://bugs.php.net/fix.php?id=43844&r=notwrong
Not enough info:
http://bugs.php.net/fix.php?id=43844&r=notenoughinfo
Submitted twice:
http://bugs.php.net/fix.php?id=43844&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=43844&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=43844&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=43844&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=43844&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=43844&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=43844&r=float
No Zend Extensions: http://bugs.php.net/fix.php?id=43844&r=nozend
MySQL Configuration Error: http://bugs.php.net/fix.php?id=43844&r=mysqlcfg