我已根据具体情况更新了我的记录,之后我想知道受影响行中的ID。
$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'");
现在执行此查询后,我想知道受影响的行。
答案 0 :(得分:1)
答案 1 :(得分:-1)
您必须先获取 ID,然后执行更新。如果需要考虑并发性,可以使用locking read(假设您的表存储在事务引擎中,例如InnoDB):
$mysqli->autocommit(FALSE);
$select = $mysqli->prepare('SELECT id FROM table WHERE yyy = ? FOR UPDATE');
$select->bind_param('s', $y);
$select->execute();
$update = $mysqli->prepare('UPDATE table SET xxx = ? WHERE yyy = ?');
$update->bind_param('ss', $x, $y);
$update->execute();
$mysqli->commit();
// here are the IDs that were updated
$select->bind_result($id);
while ($select->fetch()) printf('Updated id: %s\n', $id);
答案 2 :(得分:-1)
我能想到的唯一方法是首先清理将使用update语句更新的行,它们是:
$updatableIds = mysqli_query("SELECT id FROM table WHERE xxx !='".$x."' AND yyy='".$y."'");
我们添加了xxx !='".$x."'
,因为如果xxx
的值已经$x
,那么这些行就不会受到影响。
接下来运行更新
$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'");
答案 3 :(得分:-1)
UPDATE users
SET type = '3'
WHERE type = '2';
要在语句后找到最后一个受影响的行,应按如下方式略微更新:
UPDATE users
SET type = '3',
user_id=LAST_INSERT_ID(user_id)
WHERE type = '2';
//使用功能
function updateAndGetId($value)
{
$query ="UPDATE users
SET type = '$value',
user_id=LAST_INSERT_ID(user_id)
WHERE type = '2'";
mysql_query($query)
return mysql_insert_id();
}
$lastUpdatedRow = updateAndGetId(3);
如果您只想更新真正更改的行,请通过LAST_INSERT_ID
添加user_id的条件更新,并检查数据是否会在行中更改。