Hi! I have bug #43246 open and just posted a "patch comment" there. As I don't know how to (or cannot) upload patches in the bug system. The problem is: Queries ending in "RETURNING ..." get qualified as stored procedure calls. Contrary to the docs, the PDOStatement->execute call is returning the stored procedure's return value... Just eliminating this undocumented behaviour clears the problem! As I don't assume authority in php internals, the attached patch (against CVS PHP_5_3) only "out-ifdefs" the "corrupt" parts. Greets HPO
diff -u php5-orig/ext/pdo_firebird/firebird_statement.c php5/ext/pdo_firebird/firebird_statement.c --- php5-orig/ext/pdo_firebird/firebird_statement.c 2007-11-12 16:59:34.000000000 +0100 +++ php5/ext/pdo_firebird/firebird_statement.c 2007-11-12 16:58:46.000000000 +0100 @@ -99,11 +99,15 @@ /* assume all params have been bound */ +#if 0 if ((S->statement_type == isc_info_sql_stmt_exec_procedure && isc_dsql_execute2(H->isc_status, &H->tr, &S->stmt, PDO_FB_SQLDA_VERSION, S->in_sqlda, &S->out_sqlda)) || isc_dsql_execute(H->isc_status, &H->tr, &S->stmt, PDO_FB_SQLDA_VERSION, S->in_sqlda)) { +#else + if (isc_dsql_execute(H->isc_status, &H->tr, &S->stmt, PDO_FB_SQLDA_VERSION, S->in_sqlda)) { +#endif break; } @@ -138,9 +142,11 @@ /* an EXECUTE PROCEDURE statement can be fetched from once, without calling the API, because * the result was returned in the execute call */ +#if 0 if (S->statement_type == isc_info_sql_stmt_exec_procedure) { S->exhausted = 1; } else { +#endif if (isc_dsql_fetch(H->isc_status, &S->stmt, PDO_FB_SQLDA_VERSION, &S->out_sqlda)) { if (H->isc_status[0] && H->isc_status[1]) { RECORD_ERROR(stmt); @@ -148,7 +154,9 @@ S->exhausted = 1; return 0; } +#if 0 } +#endif return 1; } return 0;
-- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php