无法使用php oci从oracle存储过程捕获oracle异常
有人知道如何在php中捕获oracle异常吗? 我有一个存储过程,当发生某些事情时会引发异常,我希望将消息直接传递给浏览器。我尝试使用try-catch和oci\u-error,但仍然无法捕获异常。我想从oracle存储过程中捕获类似的内容无法使用php oci从oracle存储过程捕获oracle异常,php,oracle,exception,stored-procedures,Php,Oracle,Exception,Stored Procedures,有人知道如何在php中捕获oracle异常吗? 我有一个存储过程,当发生某些事情时会引发异常,我希望将消息直接传递给浏览器。我尝试使用try-catch和oci\u-error,但仍然无法捕获异常。我想从oracle存储过程中捕获类似的内容 RAISE_APPLICATION_ERROR(-20101, 'SOME EXCEPTION'); public function oci_procedure_call($package_name, $proc_name, $param) {
RAISE_APPLICATION_ERROR(-20101, 'SOME EXCEPTION');
public function oci_procedure_call($package_name, $proc_name, $param)
{
$sql = "begin $package_name.$proc_name(";
foreach ($param as $p) {
$sql .= $p['name'] . ',';
}
$sql = trim($sql, ',') . '); end;';
$stmt = oci_parse($this->db->conn_id, $sql);
foreach ($param as $p) {
oci_bind_by_name($stmt, $p['name'], $p['value'], $p['length'], $p['type']);
}
try {
$r = oci_execute($stmt);
} catch (Exception $e) {
log_message('info', print_r($e, true));
}
if (!$r) {
$e = oci_error($this->db->conn_id);
return $e['message'];
} else {
return true;
}
}
并将“某些异常”发送到浏览器。
在php代码中,我使用了codeigniter,但我无法使用它提供的驱动程序调用该过程,因此我创建了自己的函数。它与codeigniter提供的非常相似,但我不知道为什么我的工作。下面是调用存储过程的函数
RAISE_APPLICATION_ERROR(-20101, 'SOME EXCEPTION');
public function oci_procedure_call($package_name, $proc_name, $param)
{
$sql = "begin $package_name.$proc_name(";
foreach ($param as $p) {
$sql .= $p['name'] . ',';
}
$sql = trim($sql, ',') . '); end;';
$stmt = oci_parse($this->db->conn_id, $sql);
foreach ($param as $p) {
oci_bind_by_name($stmt, $p['name'], $p['value'], $p['length'], $p['type']);
}
try {
$r = oci_execute($stmt);
} catch (Exception $e) {
log_message('info', print_r($e, true));
}
if (!$r) {
$e = oci_error($this->db->conn_id);
return $e['message'];
} else {
return true;
}
}
为了进一步参考,您是否介意展示一些php代码?另外,欢迎来到Stackoverflow。谢谢:)。我已经添加了我的php代码。希望有帮助。@Mark你能将你的代码改成这样吗:(注意块注释的部分和它们后面的部分)然后再试一次?@Passerby我尝试过使用你在链接中提供的代码,但它无法通过这一行
$sql.=infrade(,”,array_column($param,“name”)代码>。它就停在那里。我尝试过用我的原始代码更改这一行,这很好,可以遍历代码的其余部分,但没有区别。@路人对不起,这是我的错误,我的php版本是5.3.8。我再试一次。