2017-12-02 3 views
-1

このコードは行を更新するために正常に動作しますが、私はRETURN更新された行IDにします。どうすればいいのか教えてください。どのように私は与えられたコードの更新された行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 
} 
+0

。 –

+0

他の目的で別のテーブルにそのIDを挿入する必要があります – pankaj

+0

IDはテーブルの主キーではありませんか? –

答えて

-1

あなたはこのmysql_insert_id()

を以前のINSERTまたはUPDATEステートメントでAUTO_INCREMENTカラム用に生成された値を返します

使用することができます。 AUTO_INCREMENTフィールドを含むテーブルにINSERT文を実行した後、またはINSERTまたはUPDATEを使用してLAST_INSERT_ID(expr)で列値を設定した後に、この関数を使用します。

Futhurあなたはすでにあなたが更新している行のidを知っupdateinsertとは異なり言及リンク

1

上から読み取ることができます。あなたのコードでは、それはあなたが挿入をしていた場合は、これだけ

return $ID; 

を行うpdo機能がhttp://php.net/manual/en/pdo.lastinsertid.phpだろう$IDです。

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

あなたが最後に更新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. 
+1

行が存在し、値が更新された場合、lastInsertId()を使用して、更新された行のIDを取得します。 - http://php.net/manual/en/pdo.lastinsertid.php –

0

これは私のために働いてくれました編集テーブルは、行が変更されるたびに自動的に追跡するようにします。

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

次に、最後に更新された行を探します。あなたは既に$のIDを持ったときに、あなたの更新クエリの最後のインサートIDが必要なのか、なぜ

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']; 

}

関連する問題