ID: 49429
Comment by: kristoff dot picard at ingres dot com
Reported By: jvanderleij at desyderetail dot nl
Status: Open
Bug Type: ODBC related
Operating System: Windows XP professional
PHP Version: 5.3.0
New Comment:
Same problem with 5.3.1
Tested on Linux with unixODBC and Ingres
Simple testcase:
------
$dsn='mydsn';
$conn=odbc_connect($dsn,'','');
$rc=odbc_autocommit($conn,FALSE);
echo "return set odbc_autocommit false: ".$rc. "\n";
$rc=odbc_autocommit($conn);
echo "return get odbc_autocommit: ".$rc. "\n";
-----
Output is as follows:
return set odbc_autocommit false: 1
return get odbc_autocommit: 1
While with 5.2.11 it is:
return set odbc_autocommit false: 1
return get odbc_autocommit: 0
ODBC trace shows that in 5.3.x SQLSetConnectOption() isn't called when
passing FALSE as second parameter, but SQLGetConnectOption.
When passing TRUE SQLSetConnectOption() is called as expetced.
Previous Comments:
------------------------------------------------------------------------
[2009-09-01 10:50:55] jvanderleij at desyderetail dot nl
Description:
------------
In PHP-version 5.3.0 the odbc_autocommit function with second parameter
filled in always returns false. We tested this with sql server and
progress database. In PHP-version 5.2.10 we don't have this problem.
The actual result is the progress output from PHP 5.3.0.
The expected result is the progress output from PHP 5.2.10.
Reproduce code:
---------------
<?php
function reporterror($con, $extramsg)
{
echo $extramsg.'<br>';
$errnum = odbc_error($con);
$errstr = odbc_errormsg ($con);
echo 'error '.$errnum.' errmsg '.$errstr.'<br>';
}
function setisolationlevel($con, $level)
{
$statement = 'SET TRANSACTION ISOLATION LEVEL ' . $level;
$res = odbc_exec ($con, $statement);
if ($res === FALSE)
reporterror($con, 'exec failed '.$statement);
}
function starttransaction($con)
{
$res = odbc_autocommit ($con, false);
if ($res !== TRUE)
reporterror($con, 'odbc_autocommit false failed ');
}
function committransaction($con)
{
$res = odbc_commit($con);
if ($res !== TRUE)
reporterror($con, 'committransaction failed ');
$res = odbc_autocommit ($con, true);
$res = odbc_autocommit ($con, true);
if ($res !== TRUE)
reporterror($con, 'odbc_autocommit true failed ');
}
function test1($con)
{
echo 'test 1<br>';
setisolationlevel($con, 'READ UNCOMMITTED');
starttransaction($con);
$rs = odbc_exec ($con, "SELECT * from tbloctsequence where
seqname =
'testdanny'");
if ($rs === FALSE)
{
reporterror($con, 'exec failed');
echo 'exec failed<br>';
} else
{
echo 'exec succeeded<br>';
for (;;)
{
$ar = odbc_fetch_array($rs);
if ($ar === FALSE)
break;
else
{
print_r($ar);
echo '<br>';
}
}
odbc_free_result ($rs);
}
committransaction($con);
}
function test2($con)
{
echo 'test 2<br>';
setisolationlevel($con, 'READ COMMITTED');
starttransaction($con);
$rs = odbc_exec ($con, "INSERT INTO tblLabelnamen (Naam) VALUES
('testdanny')" );
if ($rs === FALSE)
{
reporterror($con, 'exec failed');
echo 'exec failed<br>';
} else
echo 'exec succeeded<br>';
committransaction($con);
}
$con = odbc_connect ( 'progresstest', 'test' , 'test');
// $con = odbc_connect ( 'mssqltest', 'test' , 'test');
if ($con == 0)
{
echo 'connect failed<br>';
} else
{
echo 'connect succeeded<br>';
test1($con);
test2($con);
odbc_close ($con );
}
?>
Expected result:
----------------
connect succeeded
test 1
exec succeeded
test 2
exec succeeded
Actual result:
--------------
connect succeeded
test 1
odbc_autocommit false failed
error ¸-Ö errmsg
exec succeeded
test 2
exec failed SET TRANSACTION ISOLATION LEVEL READ COMMITTED
error S1000 errmsg [DataDirect][ODBC Progress OpenEdge Wire Protocol
driver][OPENEDGE]Cannot change the transaction isolation level while in
a transaction. (13742)
odbc_autocommit false failed
error S1000 errmsg [DataDirect][ODBC Progress OpenEdge Wire Protocol
driver][OPENEDGE]Cannot change the transaction isolation level while in
a transaction. (13742)
exec failed
error S1000 errmsg [DataDirect][ODBC Progress OpenEdge Wire Protocol
driver][OPENEDGE]Statement not allowed in readonly isolation level
(7671)
exec failed
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=49429&edit=1