]> granicus.if.org Git - php/commitdiff
closes #33707: error information was not passed up to PDO::query().
authorWez Furlong <wez@php.net>
Sat, 10 Sep 2005 21:38:07 +0000 (21:38 +0000)
committerWez Furlong <wez@php.net>
Sat, 10 Sep 2005 21:38:07 +0000 (21:38 +0000)
ext/pdo_oci/oci_driver.c
ext/pdo_oci/tests/bug_33707.phpt [new file with mode: 0644]

index 50113c4790dd95dade5ae14d474c11bf3e4eb859..d3824d360c7c5818d6df45f65aa16278bd696d6e 100755 (executable)
@@ -144,6 +144,18 @@ ub4 _oci_error(OCIError *err, pdo_dbh_t *dbh, pdo_stmt_t *stmt, char *what, swor
                }
        }
 
+       if (stmt) {
+               /* always propogate the error code back up to the dbh,
+                * so that we can catch the error information when execute
+                * is called via query.  See Bug #33707 */
+               if (H->einfo.errmsg) {
+                       efree(H->einfo.errmsg);
+               }
+               H->einfo = *einfo;
+               H->einfo.errmsg = einfo->errmsg ? estrdup(einfo->errmsg) : NULL;
+               strcpy(dbh->error_code, stmt->error_code);
+       }
+
        /* little mini hack so that we can use this code from the dbh ctor */
        if (!dbh->methods) {
                zend_throw_exception_ex(php_pdo_get_exception(), 0 TSRMLS_CC, "SQLSTATE[%s]: %s", *pdo_err, einfo->errmsg);
diff --git a/ext/pdo_oci/tests/bug_33707.phpt b/ext/pdo_oci/tests/bug_33707.phpt
new file mode 100644 (file)
index 0000000..78d3419
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+PDO OCI Bug #33707
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo') || !extension_loaded('pdo_oci')) die('skip not loaded');
+require 'ext/pdo_oci/tests/config.inc';
+require 'ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require 'ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory('ext/pdo_oci/tests/common.phpt');
+$db->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_SILENT);
+
+$rs = $db->query('select blah from a_table_that_doesnt_exist');
+var_dump($rs);
+var_dump($db->errorInfo());
+
+--EXPECTF--
+bool(false)
+array(3) {
+  [0]=>
+  string(5) "HY000"
+  [1]=>
+  int(942)
+  [2]=>
+  string(113) "OCIStmtExecute: ORA-00942: table or view does not exist
+ (%s:%d)"
+}