选择最后受影响的行

时间:2015-04-21 08:43:57

标签: php select mysqli

我已根据具体情况更新了我的记录,之后我想知道受影响行中的ID。

$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'");

现在执行此查询后,我想知道受影响的行。

4 个答案:

答案 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的条件更新,并检查数据是否会在行中更改。