Bug #51476 [Opn]: odbc_execute doesn't return proper result

[email protected] ("alexeyp at gmail dot com") Tue, 6 Apr 2010 11:24:39 +0200 (CEST)
Newsgroups php.bugs
Message-ID <[email protected]>
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