如何在给定代码中返回更新的行ID

时间:2017-12-02 14:33:38

标签: php pdo

此代码适用于更新行,但我希望RETURN更新行ID。请让我知道我该怎么做。

static function editProject($arr)
{
    foreach ($arr as $key => $value) {
        $$key = $value;
    }
    $db = new DatabaseConnection();
    $dbh = $db->getDBH();
    $sql = "UPDATE Project SET Job_Name='$JobName',Job_Number='$JobNumber',Location='$Location',
            Project_SupervisorID='$ProjectSupervisorID',Project_ManagerID='$ProjectManagerID',Notes='$Notes',Category='$Category'
            WHERE ID='$ID'";
    $pdo = $dbh->query($sql);
    $db->disconnect();
    return $pdo->rowCount(); // INSTEAD of ROW COUNT RETURN I WANT TO RETURN ID here
 }

4 个答案:

答案 0 :(得分:1)

insert update不同,您已知道要更新的行的id。在您的代码中,它是$ID所以只需执行

return $ID;

如果您正在进行插入,则pdo函数将为http://php.net/manual/en/pdo.lastinsertid.php

使用PDO时,您还应该使用参数化查询和预准备语句。 http://php.net/manual/en/pdo.prepared-statements.php

粗略参数化版本:

$sql = "UPDATE Project 
        SET Job_Name=?,
            Job_Number=?,
            Location=?,
                Project_SupervisorID=?,
            Project_ManagerID=?,
            Notes=?,
            Category=?
        WHERE ID=?";
$pdo = $dbh->prepare($sql);
$pdo->execute(array($JobName, $JobNumber, $Location, $ProjectSupervisorID, $ProjectManagerID, $Notes, $Category, $ID));

答案 1 :(得分:1)

在更新查询中,您已拥有ID,因此您无需知道上次更新的ID。

$ ID是您在案例中寻找的更新ID。所以你只需要返回$ ID。

return $ID;

否则,您可以使用以下PDO查询获取上次更新的ID。

$pdo = $dbh->lastInsertId();
// If the row exists AND a value is updated, with lastInsertId() you will get the ID of the updated row.

答案 2 :(得分:0)

这对我有用Edit编辑表,以便在修改行时自动跟踪。

ALTER TABLE Project
ADD lastmodified TIMESTAMP 
DEFAULT CURRENT_TIMESTAMP 
ON UPDATE CURRENT_TIMESTAMP;

然后,找出最后更新的行。

 SELECT ID FROM Project ORDER BY lastmodified DESC LIMIT 1;

   static function editProject($arr)
{
    foreach ($arr as $key => $value) {
        $$key = $value;
    }
    $db = new DatabaseConnection();
    $dbh = $db->getDBH();
    $sql = "UPDATE Project SET Job_Name='$JobName',Job_Number='$JobNumber',Location='$Location',
            Project_SupervisorID='$ProjectSupervisorID',Project_ManagerID='$ProjectManagerID',Notes='$Notes',Category='$Category'
            WHERE ID='$ID'";
    $pdo = $dbh->query($sql);

    $sql = "SELECT ID FROM Project ORDER BY lastmodified DESC LIMIT 1;";

    $pdo = $dbh->query($sql);
    $n = $pdo->fetch(PDO::FETCH_ASSOC);

   $db->disconnect();
   return $n['ID'];

}

答案 3 :(得分:-1)

您可以使用此mysql_insert_id()

  

返回先前INSERT或UPDATE语句为AUTO_INCREMENT列生成的值。在对包含AUTO_INCREMENT字段的表执行INSERT语句或使用INSERT或UPDATE设置具有LAST_INSERT_ID(expr)的列值后使用此函数。

Futhur你可以阅读上面提到的链接