Php Loggin';尝试捕获事务

Php Loggin';尝试捕获事务,php,pdo,transactions,try-catch,Php,Pdo,Transactions,Try Catch,我的代码是 try{ $this->_db->beginTransaction(); $stmt = $this->_db->prepare("..."); $stmt->execute(array($var1, $var2)); ... }

我的代码是

                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{}的第一行,这意味着回滚对文件内容没有影响。但是,如果查询处的数据无效,则回滚工作将重新启动它们,并且DB处没有任何更改。但是回滚之前的行永远不起作用

错误已启用,但未显示任何内容。。。我不能放弃,我必须理解


更新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");

try..catch块内部没有本质上的不同。您的文件编写代码应该与外部代码的工作方式相同,没有区别


我能想到的唯一问题与try..catch无关,但通常与异常无关:抛出的异常终止进一步的代码执行。比方说,如果
$stmt->rollBack()中有错误-不会执行以下代码。因此,最好将记录器移到块的顶部。

您知道,如果某些代码是以“我将某物放在某个地方”的形式编写的,很难说为什么它不起作用。尝试将文件内容放在回滚之上,并在可能的情况下打开错误报告。您只是没有设置正确的错误模式,请参阅此处的“无效数据”部分?你试过什么调试?如果你不知道你的系统是否工作,为什么还要写文件呢?为什么不回显错误呢?您是否引发了异常?在写信给我之前回答这个问题谢谢你的回答。请参阅主要帖子的更新。对我来说还是没有结果。顺便问一下,应该有哪些错误?我尝试使用错误的表名称和值。感谢您的帮助。即使我不需要它,我也知道如何让它发挥作用,这仍然是一个很好的实践。今天我读了很多关于异常的信息。