我有一个音乐数据库,我正在尝试检查用户是否输入了重复的相册。当专辑标题和艺术家名称相同时,它会出错并且不会按预期插入数据。当它是一个不同的艺术家但同一个专辑名称时,它也适用。但是当它已经是数据库中的艺术家的新专辑时,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";
答案 0 :(得分:3)
在同一次运行中同时击中两个(if / else)是不可能的,如果两件事都发生是因为你正在运行你的脚本两次,或者某些东西再次调用它。我建议您分析代码执行流程
答案 1 :(得分:0)
当您在 if 块中出现异常时,有时会发生这种情况。我也面临同样的问题。这是因为我在 if 块中的方法调用中出现了一些错误。在调试时,我可以看到控制在两个块中进行。
duplicateAlbum() 或 echoResults() 可能有问题。