2015-09-08 59 views
3

我需要一些人的幫助。我不知道這可能與否。相同的自動增量ID應插入插入查詢

在PHP中,當我插入新的查詢到數據庫ID值將自動增量。該查詢中有一個變量,即parentID

運行查詢時,parentID應該等於自動增量ID。我試過mysqli_insert_id($conn);這個函數。獲取最後一個ID。添加一個具有該值的值,然後將該值分配給parentID,然後插入數據庫。

但有些時候它可能會給隔離問題。所以任何一個指南都提供了一些其他解決方案來避免孤立問題。隔離意味着當我嘗試插入時,我從db獲取了最後一個ID。現在將該值分配給ParendID變量。然後我嘗試插入到數據庫中。假定它可能需要幾分鐘。在那幾分鐘內,其他人可以插入他們自己的問候。那次我的最後一個ID將會有所不同。所以我插入錯誤的parendID值。

請任何人幫我解決這個問題..!

<?php 
    //My connection 
    $last_id = $conn->insert_id; //get last ID from DB 
    $parent_id = $last_id + 1; 

    $sql = "INSERT INTO MyGuests (firstname, lastname, email, ParentID) 
      VALUES ('John', 'Doe', '[email protected]', $parent_id)"; 

    if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully."; 
    } else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

?> 

首先我得到LastID,然後添加一個該值。然後我將插入到數據庫中。而不是這種方法,在查詢本身,直接,可以給任何其他可能的解決方案分配父ID等於該字段的當前ID?

+0

完全失去了你的問題,你有什麼碼?我想你要求將自動編號放入多個列中? –

+0

只有在插入與DB –

+0

相同的連接後,才能得到正確的最後一個插入的ID,感謝其他方式? –

回答

1

這可以在觸發器的幫助下完成, 您需要做的就是將id的新值複製到parentID「AFTER」插入中。

CREATE TRIGGER ins_parentID 
AFTER INSERT ON MyGuests 
FOR EACH ROW SET 
NEW.ParentId = NEW.ID; 

代碼應該是這個樣子(這個人是不是測試)

+0

這是否不給隔離問題? –

+0

隔離問題? 不知道這個特定的代碼片段,但這是它應該如何完成的。每次添加新記錄時,它都會自動填充最後一列。 –

+0

如果有人在添加到db後添加了新的列,這段代碼會給我的ID還是由其他人更新的ID?請假定在一秒鐘內將會有10個記錄添加到數據庫中。 –