gpt4 book ai didi

PHP CodeIgniter 错误不会停止执行 Try block

转载 作者:行者123 更新时间:2023-12-03 08:22:38 25 4
gpt4 key购买 nike

我正在使用 CodeIgniter 并尝试在 try/catch block 中执行代码,其想法是错误将在错误之后停止执行代码,直到到达 catch block ,因为您通常认为它会起作用。

但是在遇到 PHP 错误时,代码仍在继续。这会导致执行数据库事务完成命令,如果出现错误并且所有指令均未正确执行,则非常糟糕。例如,我有这个在 ajax 请求中执行的代码:

// start transaction
$this->db->trans_start();

try {

$this->M_debug->fblog("firstName=" . $triggerOpts->{'firstXXXName'});

$data = array("test_col" => 123);
$this->db->where("id", 4);
$this->db->update("my_table", $data);

// if got this far, process is ok
$status = "process_ok";

// complete transaction
$this->db->trans_complete();

} catch (Exception $ex) {

// output the error
$this->M_debug->logError($ex);

}

在这段代码中,我试图将数据库更新作为事务的一部分来执行。
我的电话 $this->M_debug->fblog()旨在将一个变量记录到 PHP 控制台,我故意尝试记录一个不存在的变量。

这会导致一个PHP错误,我猜这是一个 fatal error ,而想要的结果是日志命令之后的代码失败,并且事务没有完成。但是在这个错误之后,尽管在 Chrome 控制台中报告了 PHP 错误,但代码继续执行,数据库更新并且事务完成。对于如何阻止这种情况发生的任何帮助,我将不胜感激。

非常感谢,G

编辑 -

按照这里 fblog() 的要求,它只是一个变量的 Chrome 控制台日志请求
public function fblog( $var ) {
ChromePhp::log( $var );
}

最佳答案

假设您使用的是 PHP 7.0 或更高版本,您可以捕获 PHP 错误和异常,但是您需要捕获 Error或 parent Throwable输入而不是 Exception .

try {
...
} catch (Throwable $ex) {
//this will catch anything, including Errors and Exceptions
}

或者如果你想为他们每个人做一些不同的事情,或者单独捕获他们......
try {
...
} catch (Exception $ex) {
//this will catch Exceptions but not errors.
} catch (Error $ex) {
//this will Errors only
}

请注意,如果您仍然只有 PHP 5.x,则上述方法将不起作用;您无法在较旧的 PHP 版本中捕获 PHP 错误。

关于PHP CodeIgniter 错误不会停止执行 Try block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52949661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com