2015-04-21 32 views
8

我已經根據特定條件更新了我的記錄,之後我想知道受影響行的ID。選擇最後一個受影響的行

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

現在執行此查詢後,我想知道受影響的行。

+1

數量是'mysqli_affected_rows'可用,行(和id的)自己,你會在另一個查詢來選擇。 – jeroen

+0

@jeron我需要記錄兄弟 –

+1

注意:你似乎在對抗語法糖。 'UPDATE foo SET xxx =?,yyy =?''?甚至''UPDATE foo SET xxx ='$ x',yyy ='$ y'「'更具可讀性。 –

回答

-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); 
-1

我能想到的唯一的辦法是首先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."'"); 
-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的條件更新,並檢查數據是否將在行中發生更改。

+0

這將如何工作的多行? –