嗨,我想知道是否有可能只在一个查询中执行此操作。计数并执行插入或更新
$qryString="SELECT * FROM votes WHERE userID='$userID' AND messageID='$messageID'";
$qry = $pdo->prepare($qryString);
$qry->execute();
$resultArray=$qry->fetchAll();
$num=count($resultArray);
if ($num==0)
{$qryString= "INSERT INTO Votes (userID, value, messageID) VALUES ('$id', '$value', '$messageID')" }
else
{ $qryString = "UPDATE votes SET value='$value', WHERE userID='$id' AND messageID='$messageID' " }
这样做,我会执行至少两个查询。这是一种“怪诞”的方法(带来性能的影响),或者这是正确的方式?
它不仅具有性能影响,但是具有争用条件,其中另一种方法插入相同的记录(或删除它)中的时间跨度那些2之间sql查询,导致第二个查询失败。一个交易可以解决这个问题,但是'重复密钥更新'在这里更好。 – goat
uhm,在最坏的情况下,它只是检索一个错误,或者它会阻碍整个数据库? – Sonia