トランザクションエラーが発生したにもかかわらず、サブスクライバテーブルの自動番号が1になるため、ロールバックは役に立ちません。その後、IDが一致していないので、それはlist_サブテーブルに情報を追加することはできませんので、私はマイナス自動車株式会社番号にmysqlデータベース操作では良い習慣ではありませんか?
ALTER TABLEID自動INC = 1
を使用して、私はそれを置きます他のtry-catchのないcatchブロック。しかしそれは一般的な練習ですか?ありがとう
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE);
$conn->beginTransaction();
try {
$email = $_POST['Email'];
$FirstName = $_POST['FirstName'];
$LastName = $_POST['LastName'];
$query="INSERT INTO subscriber (Email,FirstName,LastName,CreateDate) VALUES (?,?,?,CURDATE())";
$stmt = $conn->prepare($query);
$stmt->bindParam(1, $email , PDO::PARAM_STR);
$stmt->bindParam(2, $FirstName, PDO::PARAM_STR);
$stmt->bindParam(3, $LastName, PDO::PARAM_STR);
$stmt->execute();
$conn->commit();
}
catch(PDOException $e)
{
$conn->rollBack();
$query="ALTER TABLE subscriber AUTO_INCREMENT = 1";
$stmt = $conn->prepare($query);
$stmt->execute();
die ($e->getMessage()."<a href='addSub.php'>Back</a>");
}
$conn->beginTransaction();
try {
$userID = $_SESSION['username'];
$query="INSERT INTO list_sub (SubID,ListID) VALUES ('',$_SESSION[ListID])";
$stmt = $conn->prepare($query);
$stmt->execute();
$conn->commit();
}
catch(PDOException $e)
{
$conn->rollBack();
die ($e->getMessage()."<a href='addSub.php'>Back</a>");
}
$conn = null;}
表:Subsciber
1 SubID int(11) No None AUTO_INCREMENT Change Drop More
2 Email varchar(100) utf8_general_ci No None Change Drop More
3 FirstName varchar(100) utf8_general_ci Yes NULL Change Drop More
4 LastName varchar(100) utf8_general_ci Yes NULL Change Drop More
5 CreateDate date No None Change Drop More
6 UpdateDate date Yes NULL Change Drop More Check All/Uncheck All With selected: Browse Change Drop Primary Unique Index
表:
1 SubID int(11) No None AUTO_INCREMENT Change Drop More
2 ListID int(11) No None Change Drop More
表list_sub:リスト
1 ListID int(11) No None AUTO_INCREMENT Change Drop More
2 ListName varchar(100) utf8_general_ci No None Change Drop More
3 FromName varchar(100) utf8_general_ci No None Change Drop More
4 ReplyTo varchar(100) utf8_general_ci No None Change Drop More
5 Subject varchar(100) utf8_general_ci No None Change Drop More
6 IsRemindSub tinyint(1) No None Change Drop More
7 IsRemindUnSub tinyint(1) No None Change Drop More
8 CreateDate date No None Change Drop More
9 Reminder varchar(100) utf8_general_ci No None Change Drop More
データベースは、値が順次であるかどうかは気にしないので、それらは一意であるということだけです。だからあなたもあまりにも... –
しかし、エラーが発生したら、私は他の有効なレコードを追加できません。 テーブルサブスクライバauto-inc no。 +1、table list_sub auto-inc no。同じことを思い出させる – user782104
これは恐ろしく悪いデザインです、それは本当です。 2番目のテーブルに自動インクリメントをドロップするだけです。あなたはすでに価値があるものを知っています。データベースに頼るべきではありません。 –