php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #51476 odbc_execute doesn't return proper result
Submitted: 2010-04-05 12:17 UTC Modified: 2010-04-06 11:24 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (100.0%)
From: alexeyp at gmail dot com Assigned:
Status: Open Package: ODBC related
PHP Version: 5.2.13 OS: Linux
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: alexeyp at gmail dot com
New email:
PHP Version: OS:

 

 [2010-04-05 12:17 UTC] 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.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-04-06 11:24 UTC] 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);

?>
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Wed Jun 03 07:01:25 2020 UTC