php - 区分由于错误条件导致的失败更新和由于未更改值导致的失败更新

标签 php mysql

我的问题是关于 MySQL UPDATE 语句,如果不满足 WHERE 子句中的更新条件,它返回 zero '0' 但也返回 zero '0' 如果 UPDATE 语句中声明的值也未更改并且我正在使用 mysqli_affected_rows($conn); 检查受影响的行是否有区分这两种失败的方法。

这是一个示例表:

ID(auto_increment) | music_name     | price | genre |
556785             | rock star      | $30   | rap   |
896785             | game of thrones| $30   | O.S.T |
116785             | i can dance    | $30   | dance |

这是一个示例代码:

$query="UPDATE `songs` SET `music_name`='$name', `price`='$price' WHERE `genre`=$genre" ;
$result= mysqli_query($conn,$query);

if(mysqli_affected_rows($conn)===0)
{
  $query="INSERT INTO `songs` (`music_name`,`price`,`genre`) VALUES ('$name','$price','$genre')";
  $result=mysqli_query($conn,$query);
}

现在这工作正常但是当输入数据库表中已经存在的相同值时 mysqli_affected_rows();将通过运行 INSERT INTO 语句返回 zero '0',我们最终得到重复的行。

我怎样才能使这样的查询更好?无需在 UPDATE 之前先添加更多查询来选择和检查行。还有另一种选择可能使用带条件的触发器来删除重复的行?但我认为有更好的方法。

目前除了在 auto_increment 上的 ID 之外,表中没有唯一的列

最佳答案

首先,如果值相同,MySQL 将不会更新该行,因此受影响的行数将为 0。

此问题的解决方案:

$query="SELECT count(*) as cnt FROM `songs` WHERE `music_name`='$name', `price`='$price' AND `genre`=$genre" ;
/****get count from the query******/
if(count > 0 ) {
//update the table row
}
else{
//insert the table row
}

关于php - 区分由于错误条件导致的失败更新和由于未更改值导致的失败更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48686948/

相关文章:

javascript - Jplayer 播放列表未定义

php - 使用 PHP 排序

PHP - 在 INSERT ON DUPLICATE UPDATE 问题中使用 WHERE

php - WordPress mysql 查询不接受变量

MySQL 搜索和替换语法错误

PHP 创建的文本没有应有的颜色

PHP Mysql 查询返回空值

php - 我网站上的复杂 Mysql 查询

javascript - 如何在 NodeJS 中访问 SQL 请求的结果?

mysql - 带有左连接的一个查询中的多个计数 - 按什么分组?