Php 与使用lastinsertid的同一http请求上的两个插入冲突

Php 与使用lastinsertid的同一http请求上的两个插入冲突,php,sql,pdo,Php,Sql,Pdo,我在news-create.php中有下面的代码,在这里我有一个表单可以为我的新闻选择标题和内容 我还想为我的新闻创建一个图像库 一切正常,但如果用户为我的图库选择的某些图像没有jpg、gif或png格式,我想显示一条错误消息 我先在我的新闻表上插入,然后如果我的插入返回成功,我会验证用户是否选择了任何文件,如果是$\u files['gb']['tmp\u name'],我会上传 将这些图像添加到我的文件夹中,然后我会将这些图像插入到我的多媒体资料表中,其中我的多媒体资料表的id与我的新闻上次

我在news-create.php中有下面的代码,在这里我有一个表单可以为我的新闻选择标题和内容

我还想为我的新闻创建一个图像库

一切正常,但如果用户为我的图库选择的某些图像没有jpg、gif或png格式,我想显示一条错误消息

我先在我的新闻表上插入,然后如果我的插入返回成功,我会验证用户是否选择了任何文件,如果是$\u files['gb']['tmp\u name'],我会上传 将这些图像添加到我的文件夹中,然后我会将这些图像插入到我的多媒体资料表中,其中我的多媒体资料表的id与我的新闻上次插入id相同

但我是在同一个http请求上这样做的,所以即使我为图像选择了错误的格式,我也会插入我的新闻,同时收到两条消息:

echo 'News inserted with sucess';

echo 'Send only JPG, PNG or GIF images';
你知道怎么解决这个问题吗

这是我的代码:

首先,我在数据库中插入我的新闻,如下所示:

$f['title'] = $_POST['title'];
....

$insNews = $pdo->prepare("INSERT INTO news (title,  content) VALUES (?, ?, ?)");
$insNews->bindParam(1,$f['title']); 
$insNews->bindParam(2,$f['content']);               
$insNews->execute();
$insNews = $pdo->lastInsertId();
然后我得到了我的最后一个插入id,为我的当前新闻创建了一个图像库,所以我需要将我当前新闻的id与我的库表相关联

然后,如果我的插入返回成功,如果用户选择要上载的图像,我将执行多重上载,并且我将在我的gallery表中插入当前id的选定图像:

if($insNews->rowCount() >=1){
    if($_FILES['gb']['tmp_name']){
        $count = count($_FILES['gb']['tmp_name']);
        $gb = $_FILES['gb'];
        $folder = '../galery/';
        $year = date('Y');
        $month = date('m');

        if(!file_exists($folder.$year)){
        mkdir($folder.$year,0755);
        }

        if(!file_exists($folder.$year.'/'.$month)){
        mkdir($folder.$year.'/'.$month,0755);
        }

        for($i=0;$i<=$count;$i++){

            $ext = substr($gb['name'][$i],-3);
            $name = $folder.$year.'/'.$month.'/'.$idlast.'-'.$i.time().'.'.$ext;
            $extPerm = array('image/jpeg', 'image/pjpeg', 'image/png', 'image/gif');
            if(in_array($gb['type'][$i],$extPerm)){
                uploadImage($gb['tmp_name'][$i], $name, '800', $folder);

                //and then I will do my insert into galery table here
                $insGal = $pdo->prepare("INSERT INTO gallery (img, id_news) VALUES (?, ?)");
                $insGal->bindParam(1,$name);
                $insGal->bindParam(2,$idlast);
            }
            else{
                echo 'Send only JPG, PNG or GIF images';                    
            }

        }

    }
echo 'News inserted with sucess';
}

为什么你不能在新闻输入上获得成功,在图像类型上获得失败?它们是不同的东西,一个接一个地检查。如果要防止在图像出现问题时添加新闻文章,则需要在插入文章之前先执行该检查,意思是检查类型,而不是插入到库中。但是,如果这意味着我必须重新键入文章,因为它没有错误地重新呈现给我,我可能不喜欢这样。谢谢你的回答贾里德·法里什。但对于您所说的方法,我需要发送两个http请求。一个用来检查我的图片是否一切正常,另一个用来插入我的新闻和画廊表格。我不想那样!不,我不是。尽管存在使用Javascript检查文件类型的脚本。你的问题也很不清楚,令人困惑。