gpt4 book ai didi

database - 使用 Doctrine\DBAL\Exception 捕获数据库错误

转载 作者:太空狗 更新时间:2023-10-30 02:00:32 26 4
gpt4 key购买 nike

我想从 insert 语句或任何其他语句中捕获任何错误(即:外键错误)。我如何通过 use Doctrine\DBAL\Exception 实现这一点?

当我执行 insert 时,我有这个:

            $db->beginTransaction();
try {
$db->insert('bbc5.produccionpry',$datos);
$datos['propryid'] = $db->lastInsertId();
$db->commit();
// $db = null;
$resp[] = $datos;
} catch (Exception $e) {
$error = array_merge($error, array('error' => $e->errorInfo()));
$db->rollback();
throw $e;
}

但是,这并不能阻止 concrete5 返回 一个告知错误的网站,所以,我不希望显示该网站,我想在 中捕获错误code>array() 以便通过 echo json_encode($error)

返回它

我没有将 Controller 用于页面,而是使用它通过以下代码管理来 self 的 JavaScript 应用程序的 RESTful 调用:

return fetch(`/scamp/index.php/batchprodpry/${maq}`, { 
method: 'POST',
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(this.state.a)
})

我正在使用 ReactJS

谢谢

最佳答案

不要抛出异常。

不是抛出异常,而是从 DBALException $e 对象中获取异常消息 $e->getMessage() 并将其编码为 JSON 字符串。 重要:在 echo 之后放置一个 exit; 以确保不再执行任何代码。

use Doctrine\DBAL\DBALException;

try {
$db->insert('bbc5.produccionpry',$datos);
$datos['propryid'] = $db->lastInsertId();
$db->commit();
$resp[] = $datos;
}
catch(DBALException $e){
$db->rollback();
echo \Core::make('helper/json')->encode($e->getMessage());
exit;
}

如果此代码在页面 Controller 内,您可以这样做:

try {
$db->insert('bbc5.produccionpry',$datos);
$datos['propryid'] = $db->lastInsertId();
$db->commit();
$resp[] = $datos;
}
catch(DBALException $e){
$this->error->add($e->getMessage());
}

if($this->error->has()) {
// All variables that have been set in the view() method will be set again.
// That is why we call the view method again
$this->view();
return;
}

concrete5 将负责显示适当的错误消息。

或者您可以在 session 中保存 $e->getMesssage() 并在 View 中调用它:

$session = \Core::make('session');
// ...
catch(Exception $e){
$session->set('error', $e->getMessage());
}

在 View 中:

// html
<?php
$session = \Core::make('session');
if($session->has('error')) {
$m = $session->get('error');
?>
<div id="session_error" class="alert alert-danger">
<a href="#" class="close">&times;</a>

<div id="session_error_msg">
<?php print $m ?>
</div>
</div>
<?php
}
$session->remove('error');
?>
//html

关于database - 使用 Doctrine\DBAL\Exception 捕获数据库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38883765/

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