2016-02-29 53 views
1

我正在尋找關於'如何在執行之前通過PDO獲取自動遞增ID'的解決方案,是否有辦法在pdo中獲取未來ID。如何在執行之前通過PDO獲得自動遞增ID

我試過lastinsertID但只能在'執行'之後。

下面你發現原來:

$last_id = $dbh->lastInsertId(); //last insert ID 

我PDO查詢

$insert = $dbh->prepare('INSERT INTO _gegevensgebruiker (id, company, name, adress, zipcode, city, tel, email, employees, representative, email_re, function, date_end, user, `date_add`) VALUES (NULL, :company, :name, :adress, :zipcode, :city, :tel, :email, :employees, :representative, :email_re, :function, :date_end, :meid, NOW())'); 

我知道拿到last_id的方式,但我需要一個解決方案來獲得PDO語句中的未來的ID。

下面的PDO語句外我instert_ID解決方案:

$lastusers_sql = $dbh->prepare('SELECT MAX(id) FROM users'); 
$lastusers_sql->execute(); 
$last_id = $lastusers_sql->fetchColumn(); 
+0

插入任何東西之前,爲什麼不從數據庫中獲取MAX(your_id_field)? lastisertid會給你創建後創建的id。對於MAX(your_id_field),你添加+1,並且你得到你的下一個ID,如果有人不插入之間))爲什麼你需要這個功能? –

+0

如果你看了我的問題,你會發現我需要在pdo語句中使用未來的id。所以我不理解你-1,因爲大家知道執行後lastID的解決方案,但我的問題是關於聲明中的未來ID。那麼你有未來ID的解決方案嗎? –

+0

我沒給你-1隊友。 Joshua剛回答MAX(id)+1 –

回答

-1
$insert = $dbh->prepare('INSERT INTO _gegevensgebruiker ((SELECT MAX(id)+1), company, name, adress, zipcode, city, tel, email, employees, representative, email_re, function, date_end, user, `date_add`) VALUES (NULL, :company, :name, :adress, :zipcode, :city, :tel, :email, :employees, :representative, :email_re, :function, :date_end, :meid, NOW())'); 
+0

而不是id,插入「(SELECT MAX(id)+1)」,這給你的下一個ID,這是你想要的?我不明白。但是它再次沒有多大意義,因爲你的ID已經是MAX(id)+1。 –

1

你可以做INSERT與SELECT MAX():任何你想要的值

INSERT INTO table1 
(id, column1, column2) 
(SELECT (MAX(id)+1), 'value1', 'value2' FROM table1) 

和增量ID列。

0

創建一個UID。

$uid = '123#!'; 
// $dbh->execute(); 
$lastId = $uid; 

不要將您的id列設置爲autoincr。否則它不起作用。