如果不是空的php sql,则从重复的文本字段插入数据库

如果不是空的php sql,则从重复的文本字段插入数据库,php,mysql,database,Php,Mysql,Database,我有一个包含3个表的数据库——作者、研究和案例研究 作者有AuthorId(自动递增,PK),F\u name,L\u name,Email,Contact Study有列StudyID(自动递增,PK),标题,摘要 Casestudy-AuthorId(FK,参考Author.AuthorId),StudyId(FK,参考Study.StudyId),提交(日期时间) 我有一个语句,它将数据插入到每个表中(获取authord和StudyID的ID)并插入到案例研究中 我的问题是,如果只有一位作

我有一个包含3个表的数据库——作者、研究和案例研究

作者有
AuthorId
(自动递增,
PK
),
F\u name
L\u name
Email
Contact

Study
有列
StudyID
(自动递增,
PK
),
标题
摘要

Casestudy
-
AuthorId
FK
,参考
Author.AuthorId
),
StudyId
FK
,参考
Study.StudyId
),
提交
(日期时间)

我有一个语句,它将数据插入到每个表中(获取authord和StudyID的ID)并插入到案例研究中

我的问题是,如果只有一位作者,我如何避免将第二位作者的数据传递到数据库中。否则它只存储空行。作者webform的一个示例。它复制整个容器并创建具有不同名称的相同副本

我的代码如下:

$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;
");

首先,在从未定义Author_ID2时,您定义变量的方式如下:

$AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle']));
$AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle_ID2']));
在这里,您只需使用
$\u POST['AuthorTitle\u ID2']
中的值覆盖
$AuthorTitle
,而根本不定义
$AuthorTitle\u ID2

接下来,SQL语句只会将第二个
作者
链接到
案例研究
中的
研究
,因为
LAST\u INSERT\u ID()
只会返回最后一条插入记录的ID,即使一条语句实际上插入了多条记录

最后,还有:

$AuthorTitle=mysqli\u real\u escape\u string($\u POST['AuthorTitle']);
$AuthorTitle_ID2=mysqli_real_escape_string($_POST['AuthorTitle_ID2']);
$F_Name=mysqli_real_escape_字符串($con,($_POST['first_Name']));
$F_Name_ID2=mysqli_real_escape_string($con,($_POST['first_Name_ID2'));
$L_Name=mysqli_real_escape_字符串($con,($_POST['last_Name']));
$L_Name_ID2=mysqli_real_escape_string($con,($_POST['last_Name_ID2'));
$Email=mysqli\u real\u escape\u string($con,($\u POST['Email']);
$Email_ID2=mysqli_real_escape_string($con,$u POST['Email_ID2']);
$Contactauthor=mysqli\u real\u escape\u字符串($con,($\u POST['contact']);
$Contactauthor_ID2=mysqli_real_escape_string($con,($_POST['contact_ID2'));
$Title=mysqli\u real\u escape\u字符串($con,($\u POST['Title']);
$Summary=mysqli\u real\u escape\u字符串($con,($\u POST['Summary']);
mysqli_多_查询($con,”
启动交易;
插入研究(标题、摘要)
值(“$Title”、“$Summary”);
设置@StudyId=LAST_INSERT_ID();
插入作者(作者、F_姓名、L_姓名、电子邮件、联系人)
值(“$AuthorTitle”、“$F_Name”、“$L_Name”、“$Email”、“$Contactauthor”);
设置@AuthorId=LAST_INSERT_ID();
插入案例研究(作者、研究ID、提交)
值(@AuthorId,@StudyId,NOW());
如果(“$Authortle_ID2”或“$F_Name_ID2”或“$L_Name_ID2”或“$Email_ID2”或“$Contactauthor_ID2”),则
插入作者(作者、F_姓名、L_姓名、电子邮件、联系人)
值(“$AuthorTitle_ID2”、“$F_Name_ID2”、“$L_Name_ID2”、“$Email_ID2”、“$Contactauthor_ID2”);
设置@AuthorId=LAST_INSERT_ID();
插入案例研究(作者、研究ID、提交)
值(@AuthorId,@StudyId,NOW());
如果结束;
犯罪
");

感谢您的帮助,不过我使用了php if/else。语句要长得多,但它符合我的需要。再次感谢您的支持contribution@Vlad一点也不。我同意逻辑不应该出现在这里的SQL文本中。可以通过mysqli轻松实现,从而将所有逻辑保留在PHP代码中。
$AuthorTitle       = mysqli_real_escape_string($con, ($_POST['AuthorTitle']));
$AuthorTitle_ID2   = mysqli_real_escape_string($con, ($_POST['AuthorTitle_ID2']));
$F_Name            = mysqli_real_escape_string($con, ($_POST['first_name']));
$F_Name_ID2        = mysqli_real_escape_string($con, ($_POST['first_name_ID2']));
$L_Name            = mysqli_real_escape_string($con, ($_POST['last_name']));
$L_Name_ID2        = mysqli_real_escape_string($con, ($_POST['last_name_ID2']));
$Email             = mysqli_real_escape_string($con, ($_POST['email']));
$Email_ID2         = mysqli_real_escape_string($con, ($_POST['email_ID2']));
$Contactauthor     = mysqli_real_escape_string($con, ($_POST['contact']));
$Contactauthor_ID2 = 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 study(Title, Summary)
    VALUES('$Title','$Summary');
    SET @StudyId = LAST_INSERT_ID();

    INSERT INTO author(AuthorTitle, F_Name, L_Name, Email, Contact)
    VALUES('$AuthorTitle','$F_Name','$L_Name','$Email','$Contactauthor');
    SET @AuthorId = LAST_INSERT_ID();

    INSERT INTO casestudy(AuthorId, StudyId, Submitted)
    VALUES(@AuthorId, @StudyId, NOW());

    IF ('$AuthorTitle_ID2' <> '' OR '$F_Name_ID2' <> '' OR '$L_Name_ID2' <> '' OR '$Email_ID2' <> '' OR '$Contactauthor_ID2' <> '') THEN
        INSERT INTO author(AuthorTitle, F_Name, L_Name, Email, Contact)
        VALUES('$AuthorTitle_ID2','$F_Name_ID2','$L_Name_ID2','$Email_ID2','$Contactauthor_ID2');
        SET @AuthorId = LAST_INSERT_ID();

        INSERT INTO casestudy(AuthorId, StudyId, Submitted)
        VALUES(@AuthorId, @StudyId, NOW());
    END IF;
COMMIT;
");