Bug #51476 [Fbk->NoF]: odbc_execute doesn't return proper result

From: Date: Sun, 18 Oct 2020 04:22:08 +0000
Subject: Bug #51476 [Fbk->NoF]: odbc_execute doesn't return proper result
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-229699@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=51476&edit=1

 ID:               51476
 Updated by:       php-bugs@lists.php.net
 Reported by:      alexeyp at gmail dot com
 Summary:          odbc_execute doesn't return proper result
-Status:           Feedback
+Status:           No Feedback
 Type:             Bug
 Package:          ODBC related
 Operating System: Linux
 PHP Version:      5.2.13
 Assigned To:      cmb
 Private report:   N

 New Comment:

No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.


Previous Comments:
------------------------------------------------------------------------
[2020-10-06 15:02:00] cmb@php.net

Can you still reproduce this issue with any of the actively
supported PHP versions[1]?

[1] <https://www.php.net/supported-versions.php>

------------------------------------------------------------------------
[2010-04-06 11:24:38] alexeyp at gmail dot com

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);

?>

------------------------------------------------------------------------
[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 https://bugs.php.net/bug.php?id=51476&edit=1


Thread (4 messages)

« previous php.bugs (#229699) next »