2015-01-16 6 views
0

에 마지막으로 삽입 된 ID를 반환합니다. 그래서 쿼리에서 마지막으로 삽입 한 ID를 가져오고 싶습니다. I 나는 성공적으로 마지막으로 삽입 된 ID를 얻을 수 있지만, 시도는 index.php 파일에 반환 할 때 약간의 문제가이 내 방법 코드PHP : 성명

:

 public function InsertUserCard(UserCard $uc) 
     { 
      if(!$this->DuplicateUserCard($uc)) 
      { 
       $stmt = $this->conn->prepare("INSERT INTO ".$this->table_name." 
              (user_id, card_id, barcode, barcode_format, created_at, updated_at) 
              VALUES(?, ?, ?, ?, ?, ?)"); 
       if ($stmt == FALSE) 
       { 
        die($this->conn->error); 
       } 
       else 
       { 
        $user_id = NULL; 
        $card_id = NULL; 
        $barcode = NULL; 
        $barcode_format = NULL; 
        $created_at = NULL; 
        $updated_at = NULL; 
        $stmt->bind_param("iissss", $user_id, $card_id, $barcode, $barcode_format, $created_at, $updated_at); 
        $user_id = $uc->getUserId(); 
        $card_id = $uc->getCardId(); 
        $barcode = $uc->getBarcode(); 
        $barcode_format = $uc->getBarcodeFormat(); 
        $created_at = $uc->getCreatedAt(); 
        $updated_at = $uc->getUpdatedAt(); 

        $stmt->execute(); 
        $result = $this->conn->insert_id; <-- This is how I get the last inserted id 
        $stmt->close(); 
       } 

       // Check for successful insertion 
       if ($result) 
       { 
        // User card successfully inserted 
        return USER_CARD_INSERTED_SUCCESSFULLY; 
       } 
       else 
       { 
        // Failed to insert user card 
        return USER_CARD_INSERT_FAILED; 
       } 
      } 
      else 
      { 
       return USER_CARD_ALREADY_EXISTED; 
      } 
     } 

이 내 index.php 파일입니다 당신이 보는대로

$app->post('/user/card/rev', 'authenticate', function() use ($app) 
{ 
      // check for required params 
      verifyRequiredParams(array('user_id', 'card_id', 'barcode', 'barcode_format', 'created_at', 'updated_at')); 

      global $user_id; 

      $response = array(); 
      $timestamp = time(); 
      $now = date("Y-m-d H:i:s", $timestamp); 
      $uc = new UserCard(); 
      $uc->setUserId($user_id); 
      $uc->setCardId($app->request->post('card_id')); 
      $uc->setBarcode($app->request->post('barcode')); 
      $uc->setBarcodeFormat($app->request->post('barcode_format')); 
      $uc->setCreatedAt($app->request->post('created_at')); 
      $uc->setUpdatedAt($app->request->post('updated_at')); 


      // choose card from db by user 
      $UserCardDB = new UserCardDB(MySqlDb::getInstance()->connect()); 
      $UserCard = $UserCardDB->InsertUserCard($uc); 

      if ($UserCard == USER_CARD_INSERTED_SUCCESSFULLY) 
      { 
       $response["error"] = false; 
       $response["message"] = "User Card added successfully"; 
       $response["current_timestamp"] = $timestamp; 
       $response["current_date"] = $now; 
       $response["last_inserted_id"] = SHOULD_BE_HERE; 
       echoRespnse(201, $response); 
      } 

}); 

, 나는 $response["last_inserted_id"]에 마지막으로 삽입 된 ID를 넣어 원하는,하지만 난 그것을하는 방법을 모르겠어요.

어떤 아이디어가 있습니까?

감사합니다 :)

답변

1

당신이 방법이 시도 당신의 index.php에서 이것을 사용할 수 있습니다 :

public function InsertUserCard(UserCard $uc) 
    { 
     if(!$this->DuplicateUserCard($uc)) 
     { 
      $stmt = $this->conn->prepare("INSERT INTO ".$this->table_name." 
             (user_id, card_id, barcode, barcode_format, created_at, updated_at) 
             VALUES(?, ?, ?, ?, ?, ?)"); 
      if ($stmt == FALSE) 
      { 
       die($this->conn->error); 
      } 
      else 
      { 
       $user_id = NULL; 
       $card_id = NULL; 
       $barcode = NULL; 
       $barcode_format = NULL; 
       $created_at = NULL; 
       $updated_at = NULL; 
       $stmt->bind_param("iissss", $user_id, $card_id, $barcode, $barcode_format, $created_at, $updated_at); 
       $user_id = $uc->getUserId(); 
       $card_id = $uc->getCardId(); 
       $barcode = $uc->getBarcode(); 
       $barcode_format = $uc->getBarcodeFormat(); 
       $created_at = $uc->getCreatedAt(); 
       $updated_at = $uc->getUpdatedAt(); 
      } 

      // Check for successful insertion 
      if ($stmt->execute()) 
      { 
       $result = $this->conn->insert_id; 
       $stmt->close(); 
       return $result; 
      } 
      else 
      { 
       // Failed to insert user card 
       return USER_CARD_INSERT_FAILED; 
      } 
     } 
     else 
     { 
      return USER_CARD_ALREADY_EXISTED; 
     } 
    } 

을하고 당신을을 index.php :

$app->post('/user/card/rev', 'authenticate', function() use ($app) 
{ 
      // check for required params 
      verifyRequiredParams(array('user_id', 'card_id', 'barcode', 'barcode_format', 'created_at', 'updated_at')); 

      global $user_id; 

      $response = array(); 
      $timestamp = time(); 
      $now = date("Y-m-d H:i:s", $timestamp); 
      $uc = new UserCard(); 
      $uc->setUserId($user_id); 
      $uc->setCardId($app->request->post('card_id')); 
      $uc->setBarcode($app->request->post('barcode')); 
      $uc->setBarcodeFormat($app->request->post('barcode_format')); 
      $uc->setCreatedAt($app->request->post('created_at')); 
      $uc->setUpdatedAt($app->request->post('updated_at')); 


      // choose card from db by user 
      $UserCardDB = new UserCardDB(MySqlDb::getInstance()->connect()); 
      $UserCard = $UserCardDB->InsertUserCard($uc); 

      if (($UserCard != "USER_CARD_INSERT_FAILED") and ($UserCard != "USER_CARD_ALREADY_EXISTED")) 
      { 
       $response["error"] = false; 
       $response["message"] = "User Card added successfully"; 
       $response["current_timestamp"] = $timestamp; 
       $response["current_date"] = $now; 
       $response["last_inserted_id"] = $UserCard; 
       echoRespnse(201, $response); 
      } 

}); 
+0

를 표시 $ 응답 [ "last_inserted_id을"] 변경, 위의 내 코드를 다시 확인하십시오, 그것은 위의 내 코드를 다시 확인하시기 바랍니다 USER_CARD_INSERT_FAILED – TableMan

+0

를 반환합니다 , 나는 이미 구조체를 바꾼다. 그러나 $ response [ "last_inserted_id"]는 잘못된 id를 표시한다. – TableMan

+0

값을 반환하지 않으면 결코 id를 얻지 못할 것이다. – JuanSedano

2

나는 뒤로

$inserted_id = $this->conn->insert_id; 
$result = $stmt->execute(); 

준비된 문에서, execute 당신의 SQL을 실행하는 것입니다 당신이 당신의 문을 가지고 생각합니다. 따라서 아직 삽입되지 않은 ID는 가져올 수 없습니다.

$result = $stmt->execute(); 
$inserted_id = $this->conn->insert_id; 

또한 어디서나 사용할 수있는 데이터를 ($inserted_id이 함수에 지역 변수입니다) 저장하지 않는 것입니다. $this->inserted_id과 같은 클래스 변수를 만들고 그 값을 반환하는 함수를 만드는 것을 고려하십시오.

+0

이미 구조 .. 하지만이 친구를 작동하지 않는 잘못된 ID – TableMan

0

$inserted_id 대신 코드를 사용하는 경우 $_SESSION 변수 $ _SESSION [ 'inserted_id']를 사용하십시오. 지금 당신은

$response["last_inserted_id"] = $_SESSION['inserted_id ']; 
0

방법 I을 조건부 전에 함수가 return $result;으로 끝나기 때문에 // Check for successful insertion 섹션이 실행되지 않습니다. 따라서 USER_CARD_INSERTED_SUCCESSFULLY 절대로 반환됩니다. 메인에,

$result = array("status" => $status, "id" => $id); 
return $result; 

와 : 내 기능에서

+0

나는 그것을 고쳐 주셔서 감사합니다. insert_id를 index.php로 반환하는 방법을 알고 계십니까? – TableMan

+0

DB 클래스에 대해 더 알고 싶습니다. 페치 연관 메소드가 있습니까? – TecBrat

0

, 나는 보통 예를 들어, 배열을 반환 나는이 도움말을 희망

$result = my_function(); 

$status = $result['status']; 
$id = $result['id']; 

을!

+0

위의 코드를 다시 확인하십시오. 구조가 변경되었습니다. $ response [ "last_inserted_id"] 잘못된 ID가 표시됩니다. – TableMan