我有一個數據庫與3表 - 作者,研究和Casestudy。插入數據庫從重複的文本字段,如果不是空php sql
筆者列AuthorId
(自動遞增,PK
),F_name
,L_name
,Email
,Contact
。
Study
具有列StudyID
(自動增量,PK
),Title
,Summary
Casestudy
- AuthorId
(FK
,參考Author.AuthorId
),StudyId
(FK
,參考Study.StudyId
),Submitted
(日期時間)。
我有一個聲明,它將數據插入每個表(獲取AuthorId和StudyID的ID)並插入casestudy。
我的問題是,如果只有一個作者,我該如何避免將第二作者的數據傳遞到數據庫中。否則它只存儲空行。作者webform https://jsfiddle.net/7un2yf9g/的一個例子。它複製整個容器並創建具有不同名稱的相同副本。
我的代碼如下:
$AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle']));
$AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle_ID2']));
$F_Name = mysqli_real_escape_string($con, ($_POST['first_name']));
$F_Name = mysqli_real_escape_string($con, ($_POST['first_name_ID2']));
$L_Name = mysqli_real_escape_string($con, ($_POST['last_name']));
$L_Name = mysqli_real_escape_string($con, ($_POST['last_name_ID2']));
$Email = mysqli_real_escape_string($con, ($_POST['email']));
$Email = mysqli_real_escape_string($con, ($_POST['email_ID2']));
$Contactauthor = mysqli_real_escape_string($con, ($_POST['contact']));
$Contactauthor = mysqli_real_escape_string($con, ($_POST['contact_ID2']));
$Title = mysqli_real_escape_string($con, ($_POST['Title']));
$Summary = mysqli_real_escape_string($con, ($_POST['Summary']));
mysqli_multi_query($con,"
START TRANSACTION;
INSERT INTO author(AuthorTitle, F_Name, L_Name, Email, Contact)
VALUES('$AuthorTitle','$F_Name','$L_Name','$Email','$Contactauthor'), ('$AuthorTitle_ID2','$F_Name_ID2','$L_Name_ID2','$Email_ID2','$Contactauthor_ID2');
SET @AuthorId = LAST_INSERT_ID();
INSERT INTO study(Title, Summary) VALUES('$Title','$Summary');
SET @StudyId = LAST_INSERT_ID();
INSERT INTO casestudy(AuthorId, StudyId, Submitted) VALUES(@AuthorId, @StudyId, NOW());
COMMIT;
");
感謝你的幫助,但我已經使用PHP的if/else。報表要長得多,但它適用於我所需要的。再次感謝您的貢獻 – Vlad
@Vlad完全沒有。我同意這裏的邏輯不應該在SQL文本中。 [Transaction](http://php.net/manual/en/mysqli.begin-transaction.php)可以通過mysqli輕鬆實現,從而在PHP代碼中保留所有邏輯。 –