Bug #51476 [Opn->Fbk]: odbc_execute doesn't return proper result
| From: | cmb@php.net | Date: | Tue, 06 Oct 2020 15:02:00 +0000 |
| Subject: | Bug #51476 [Opn->Fbk]: odbc_execute doesn't return proper result | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-229427@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: cmb@php.net
Reported by: alexeyp at gmail dot com
Summary: odbc_execute doesn't return proper result
-Status: Open
+Status: Feedback
Type: Bug
Package: ODBC related
Operating System: Linux
PHP Version: 5.2.13
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Can you still reproduce this issue with any of the actively
supported PHP versions[1]?
[1] <https://www.php.net/supported-versions.php>
Previous Comments:
------------------------------------------------------------------------
[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