我有一個PDO::lastInsertId()
方法沒有返回最後插入行的id(主鍵),而是返回另一個字段,這是一個外鍵字段的問題。獲取最後插入的行ID與PDO(不合適的結果)
PHP代碼:
$pdo = new PDO(...);
$stmt = $pdo->prepare($sql);
$stmt->bindParam(...);
$stmt->bindParam(...);
$stmt->execute();
$id = $pdo->lastInsertId();
// or
$id = $pdo->lastInsertId('services_id_seq'); // I think 'services_id_seq' is not necessary in MySQL
// both of them don't return the primary key of last inserted row
echo 'last inserted id: ' . $id;
MySQL表結構:
...
id int unsigned not null primary key auto_increment
customer_id int unsigned not null
user_id int unsigned not null
....
插入行中的MySQL:
id customer_id user_id ...
1 19 31 ...
PHP輸出:
last inserted id: 19
它應該返回1
不19
。我不知道我的代碼是否有問題,或者這可能是正常的行爲:?
返回值(PHP文件):
如果不是因爲名稱參數指定的序列名,
PDO::lastInsertId()
返回表示插入該行的 最後一行ID
字符串數據庫。如果爲name參數指定了序列名稱,則
PDO::lastInsertId()
將返回一個字符串,該字符串表示從指定的序列對象中檢索到的最後一個值。如果
PDO
驅動程序不支持此功能,PDO::lastInsertId()
會觸發IM001 SQLSTATE
。
要獲得序列並不那麼容易。 http://stackoverflow.com/questions/2944297/postgresql-function-for-last-inserted-id#answer-2944335 – GreenRover
@GreenRover謝謝,它也是postgresql :(我正在使用MySQL,我想知道的是'PDO :: lastInsertId()'正確的方式或不是?或者我犯了一個錯誤 –
我的模式我只紅色的順序而不是thetag。對於MySQL它看起來正確'$ id = $ pdo-> lastInsertId();'你插入也許它是無效的,你會得到最後一次插入的結果。 – GreenRover