Browse Source

closes #33707: error information was not passed up to PDO::query().

PHP-5.1
Wez Furlong 21 years ago
parent
commit
f4007c8f6b
  1. 12
      ext/pdo_oci/oci_driver.c
  2. 30
      ext/pdo_oci/tests/bug_33707.phpt

12
ext/pdo_oci/oci_driver.c

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

30
ext/pdo_oci/tests/bug_33707.phpt

@ -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)"
}
Loading…
Cancel
Save