我的代码是
try{
$this->_db->beginTransaction();
$stmt = $this->_db->prepare("...");
$stmt->execute(array($var1, $var2));
...
} catch (Exception $e) {
$stmt->rollBack();
}
我想使用函数将此操作记录到我的日志文件中
如您所见,这是为了保存交易中的错误。另一个也应该保存成功的尝试。但是,如果我将它们放在 try{} 中并 catch{} 它们由于某种原因无法正常工作。在外面它确实工作得很好,但我不确定我应该在这里检查什么是真/假以查看 try/catch 之外的结果。
感谢您的回答。我只是在学习,所以我的问题可能很愚蠢。非常遗憾。=)
更新。
我试图做的是:
try{...
} catch (Exception $e) {
$stmt->rollBack();
file_put_contents(LOG_CONST, date("r")." UderID: ".$id." Error: ".$e->getMessage()."\n", FILE_APPEND);
}
它没有放任何东西。
更新 2
不知道我是否必须在这里添加新的细节,或者我应该回答自己......无论如何。现在我正在尝试这段代码
try{
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->_db->beginTransaction();
$stmt = $this->_db->prepare
..................
$stmt->execute(array($var));
file_put_contents(DATACHANGE_LOG, date("r")." ".n307." UderID: ".$id."\n", FILE_APPEND);
$this->_db->commit();
} catch (Exception $e) {
file_put_contents(DATACHANGE_LOG, date("r")." Hello! \n", FILE_APPEND);
$stmt->rollBack();
}
我的日志文件中有有效和无效数据的相同结果。这是 try{} 的第一行,这意味着回滚在 file_put_contents 处无效。但是,如果查询中的数据无效,则回滚对它们起作用并且数据库中没有更改。但是回滚之前的行永远不会起作用。
错误已启用,但它没有显示任何内容......我不能放弃我必须理解它......
更新 3
什么是无效数据?我试过 MySQL 错误/表,行错误。为什么我需要这个?我正在学习和做很多我实际上并不需要的事情,只是为了了解它是如何工作的。正如我现在看到的那样,它在 MySQL 本身中引发了错误,因此在这种特殊情况下,记录器真的没有用。无论如何,我有我的错误,这就是它。
工作代码:
try{
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->_db->beginTransaction();
$stmt = $this->_db->prepare
QUERIES
$stmt->execute(array($var));
file_put_contents(DATACHANGE_LOG, date("r")." ".n307." UserID: ".$id."\n", FILE_APPEND);
$this->_db->commit();
}catch(PDOException $e){
file_put_contents(DATACHANGE_LOG, date("r")."Error". $e->getMessage()." UserID: ".$id."\n", FILE_APPEND);
if($this->_db->rollback())
header("Location: http://link");
}
header("Location: http://anotherlink");