PDO::lastInsertId()
最後に挿入された行の ID (主キー) を返さず、代わりに外部キー フィールドである別のフィールドを返すメソッドに問題があります。
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
notを返す必要があり19
ます。私のコードに何か問題があるかどうかはわかりません..または、これは通常の動作です:?
戻り値 (PHP ドキュメント):
name パラメーターにシーケンス名が指定されていない場合は 、データベースに挿入された最後の行の行を
PDO::lastInsertId()
表す文字列を返します。ID
name パラメーターにシーケンス名が指定された場合、
PDO::lastInsertId()
指定されたシーケンス オブジェクトから取得された最後の値を表す文字列を返します。PDO
ドライバーがこの機能をサポートしていない場合はPDO::lastInsertId()
、IM001 SQLSTATE
.