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

Reply via email to