Edit report at http://bugs.php.net/bug.php?id=51476&edit=1
ID: 51476 User updated by: alexeyp at gmail dot com Reported by: alexeyp at gmail dot com Summary: odbc_execute doesn't return proper result Status: Open Type: Bug Package: ODBC related Operating System: Linux PHP Version: 5.2.13 New Comment: I've added another test that clarifies the error a bit futher. The test (below) insert TWO records for any execution - for PostgreSQL ODBC driver. For MySQL driver, it's failing every second run, with not failing runs taking 2-3 seconds. Nether effect is observed with isql utility from unixODBC (with same drivers). Second test: ------------ <?php $db = @odbc_connect("DSN=PostgreSQL;Server=localhost;Database=demo", $user, $password); if (!$db) { echo odbc_errormsg() . "\n"; return; } $query = "INSERT INTO t1 VALUES(2,'test',100)"; $stmt = odbc_prepare($db, $query); if ($stmt === false) { $error = true; echo "Query: $query\nPrepare Error: " . odbc_errormsg($db) . "\n"; return; } else { $result = odbc_execute($stmt, array()); } if (!$result) { echo "Query: $query\nExecute error: " . odbc_errormsg($db); return; } echo "Ok\n"; odbc_free_result($stmt); ?> Previous Comments: ------------------------------------------------------------------------ [2010-04-05 12:17:25] alexeyp at gmail dot com Description: ------------ Result status for odbc_execute() is not correctly returned for CREATE TABLE statements. Tested with MySQL and PostgreSQL ODBC drivers. Execution of odbc_execute() for SELECT/UPDATE/INSERT statements doesn't have that effect. Testing CREATE TABLE with isql utility from unixODBC correctly returns an error on second execution (assuming that table didn't exist before). Test script: --------------- $stmt = odbc_prepare($db, "CREATE TABLE x(id int)"); if ($stmt === false) { $error = true; $resultStr = "Query: $query\nPrepare Error: " . odbc_errormsg($db); echo $resultStr . "\n"; } else { // Executing query (if prepare went fine) $result = odbc_execute($stmt, $parameterArray); echo $resultStr . "\n"; } if (!$result) { echo "ODBC Error: " . odbc_error($db) . "\n"; $resultStr = "Query: $query\nExecute error: " . odbc_errormsg($db); echo $resultStr . "\n"; $error = true; } Expected result: ---------------- Execution of the test script should create table "x" during the first execution without reporting an error. The second execution should report an error. Actual result: -------------- Every execution of the script reports an error: Execute error: [unixODBC]Error while executing the query (non-fatal); ERROR: relation "x" already exists The table "x" is successfully created during the first test script execution. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=51476&edit=1