Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-执行if和else语句_Php - Fatal编程技术网

PHP-执行if和else语句

PHP-执行if和else语句,php,Php,我有一个音乐数据库,我试图检查用户是否输入了重复的相册。如果唱片集标题和艺术家名称相同,则会出现错误,并且不会按预期插入数据。当它是一个不同的艺术家,但专辑名称相同时,它也适用。但是当数据库中已经有艺术家的新专辑时,PHP会同时执行if和else块 function getDB(){ try{ $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', '', ''); $db->

我有一个音乐数据库,我试图检查用户是否输入了重复的相册。如果唱片集标题和艺术家名称相同,则会出现错误,并且不会按预期插入数据。当它是一个不同的艺术家,但专辑名称相同时,它也适用。但是当数据库中已经有艺术家的新专辑时,PHP会同时执行if和else块

function getDB(){
    try{
        $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', '', '');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $db;
    }catch(Exception $e){
        echo $e->getMessage();
    }

}

function duplicateAlbum(){
    $db = getDB();
    $stmt = $db->prepare("select * from artist join album on artist.id = album.artist_id where name = ? and title = ?");
    $stmt->execute(array($_POST['artist'],$_POST['title']));
    echo $stmt->rowCount() != 0;
    return $stmt->rowCount() != 0;
}

function echoResults(){
    $db = getDB();
    $albums = $db->prepare("select * from album where title = ?");
    $albums->execute(array($_POST['title']));
    $artists = $db->prepare("select * from artist where name = ?");
    $artists->execute(array($_POST['artist']));
    $results = array("albums" => $albums->fetchAll(PDO::FETCH_ASSOC), "artists" => $artists->fetchAll(PDO::FETCH_ASSOC));
    echo json_encode($results);
}

function addAlbum($artist, $title, $genre, $released){
    $db = getDB();
    $stmt = $db->prepare("select id from artist where name = ?");
    $stmt->execute(array($artist));
    $artistresult = $stmt->fetchAll(PDO::FETCH_ASSOC)[0]['id'];
    $stmt = $db->prepare("insert into album values (?,?,?,?)");
    $stmt->execute(array($title, $genre, $released,$artistresult));
}


if(!duplicateAlbum()){
      addAlbum($_POST['artist'],$_POST['title'],$_POST['genre'],$_POST['released']);
      echoResults();
     }
else echo "Duplicate album";

如果这两种情况都发生是因为您运行了两次脚本,或者有什么东西再次调用它,那么在同一次运行中同时命中这两个(if/else)是不可能的。我建议您分析代码执行流

如果两种情况都发生是因为您运行了两次脚本,或者有东西再次调用脚本,那么在同一次运行中不可能同时命中这两个(if/else)。我建议您分析您的代码执行流

当您在if块中遇到一些异常时,有时会发生这种情况。我也面临同样的问题。这是因为我在if块中的方法调用中出现了一些错误。调试时,我可以看到控件在两个块中运行


duplicateAlbum()或echoResults()可能存在一些问题。

当if块中出现异常时,有时会发生这种情况。我也面临同样的问题。这是因为我在if块中的方法调用中出现了一些错误。调试时,我可以看到控件在两个块中运行



duplicateAlbum()或echoResults()可能有问题。

调用了多少次
duplicateAlbum()
?看起来是两次。您的输出是什么?echoResults只对两个表执行select*,并将它们以JSON格式发送到Javascript。但是,在本例中,Javascript端出现JSON错误,因为它试图解析“Duplicate album”字符串。然而,它仍然将相册添加到数据库中。@AaronFeigenbaum什么是echoResultS();更新了我的帖子。
duplicateAlbum()
被调用了多少次?看起来是两次。您的输出是什么?echoResults只对两个表执行select*,并将它们以JSON格式发送到Javascript。但是,在本例中,Javascript端出现JSON错误,因为它试图解析“Duplicate album”字符串。然而,它仍然将相册添加到数据库中。@AaronFeigenbaum什么是echoResultS();更新了我的帖子。如果我在echoResults之后有一个return语句,它实际上可以工作,但是我不知道为什么没有它它它就不能工作。嗯,在你的if/else语句之后有更多的代码吗?是的,我有一个catch块以防连接错误,还有另一个else块(连接到顶部的IF,检查$POST不是空的。也许您应该发布所有的代码。听起来像是在下结论。请考虑使用Error日志来查看您的代码真正执行了多少次。更新我的帖子。如果我在回音后有一个返回语句,它实际上是有效的,但是我不知道为什么它不能工作。嗯,在if/else语句之后还有更多的代码吗?是的,我有一个catch块以防连接错误,还有另一个else块(连接到顶部的IF,检查$POST不是空的。也许您应该发布所有的代码。听起来就像是在下结论。请考虑使用Error日志来查看您的代码真正执行了多少次。更新我的帖子。