0

私のコードは

                try{
                $this->_db->beginTransaction();
                $stmt = $this->_db->prepare("...");
                $stmt->execute(array($var1, $var2));
                                    ...

            } catch (Exception $e) {
              $stmt->rollBack();
            }

関数を使用して、このアクションをログ ファイルに記録したい

ご覧のとおり、これはトランザクションのエラーを保存するためのものです。もう 1 つは、成功した試行を保存する必要があります。しかし、それらを try{} と catch{} の中に入れると、何らかの理由で機能しません。外部ではうまく機能しますが、try/catch の外部で結果を確認するには、ここで true/false を正確に確認する必要があるかどうかわかりません。

回答ありがとうございます。私はちょうど勉強しているので、私の質問はばかげているかもしれません. 申し訳ありません。=)

アップデート。

私がやろうとしたことは次のとおりです。

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 に影響しないことを意味します。ただし、クエリのデータが無効な場合、それらに対してロールバックが機能し、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");
4

1 に答える 1