我已經根據特定條件更新了我的記錄,之後我想知道受影響行的ID。選擇最後一個受影響的行
$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'");
現在執行此查詢後,我想知道受影響的行。
我已經根據特定條件更新了我的記錄,之後我想知道受影響行的ID。選擇最後一個受影響的行
$sql = mysqli_query("update table set xxx='".$x."' where yyy='".$y."'");
現在執行此查詢後,我想知道受影響的行。
您必須先取的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);
我能想到的唯一的辦法是首先sleect行,這將是與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."'");
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的條件更新,並檢查數據是否將在行中發生更改。
這將如何工作的多行? –
數量是'mysqli_affected_rows'可用,行(和id的)自己,你會在另一個查詢來選擇。 – jeroen
@jeron我需要記錄兄弟 –
注意:你似乎在對抗語法糖。 'UPDATE foo SET xxx =?,yyy =?''?甚至''UPDATE foo SET xxx ='$ x',yyy ='$ y'「'更具可讀性。 –