私のコードは
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");