2013-04-01 78 views
1

我使用PHP作爲服務器端腳本和MySQL服務器的數據庫。 如果我使用mysql_insert_id()那麼它給「0」和使用LAST_INSERT_ID()導致錯誤「對象返回空描述」。這個錯誤,我看到當我在客戶端在Objective-C調試。 我的表的id列是自動生成的。我不'明確地傳遞id。獲取PHP中最後插入的行的編號

下面是PHP代碼:

// Connect to our database 
    $db = Frapi_Database::getInstance(); 

    $sql = "INSERT INTO userTrip 
     (userId, fromLat, fromLon, fromLoc, fromPOI, 
     toLat, toLon, toLoc, toPOI, 
     tripFinished, isMatched, departureTime, createdAt) 
     values 
     (".$userId.",".$fromLat.",".$fromLon.", GeomFromText('POINT($fromLat $fromLon)')".",'".$fromPOI."',".$toLat."," 
      .$toLon.", GeomFromText('POINT($toLat $toLon)')".",'".$toPOI."',0,0,'". 
      $departureTime."','".date('Y-m-d H:i:s')."')"; 

    $stmt = $db->prepare($sql);   

    if (!$stmt->execute()) 
     throw new Frapi_Error('ERROR_INSERTING_RECORD'); 

    $lastId = LAST_INSERT_ID(); 
    $this->data['tripId'] = $lastId; 
    $db = null; 
+0

您是否嘗試檢查您的插入是否成功? –

+0

檢查插入的記錄或者是否有自動增加的主鍵,因爲如果前一個查詢未生成AUTO_INCREMENT值,則mysql_insert_id()返回0。 – Arvind

回答

4

Frapi DatabasePDO延伸,因此會使用這樣的:

$lastId = $db->lastInsertId(); 

參見:PDO::lastInsertId()

+0

謝謝@Jack。我使用'$ db-> lastInsertId()'。它提供了價值。但這不是正確的價值。我使用Frapi數據庫。每次在測試程序中運行'insert action'時,它會給最後一個添加4,然後添加1,從而給出新的id。另一件事是我的表中最後一個id是138,它給了201. – Geek

+0

@AkashPatel你怎麼知道那個價值是錯的?插入的ID可能不會一直增加1。回滾事務和主 - 主複製設置可能會導致這種情況。 –

+0

表中增加1。我不知道你說的設置。我會找到原因。再次感謝。 – Geek

2

試試這個(如果你使用mysqli):

$db->insert_id; 

或者(如果你使用PDO):

$db->lastInsertId(); 
0

如果您的桌子有AUTO INCREMEN像用戶名,EMP_ID,T列..然後你可以使用這個查詢來獲取最後插入的記錄

SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name) 

在PHP代碼:

$con = mysqli_connect('localhost', 'userid', 'password', 'database_name'); 
if (!$con) { 
    die('Could not connect: ' . mysqli_error($con)); 
} 
$sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)"; 
$result = mysqli_query($con, $sql); 

然後你可以使用獲取的數據作爲您的要求