質問: array(':user_id' => $user_id, ':name' => $input_value['name'], ':gender' => $input_value['gender'], ':birhdate' => $input_value['birhdate']); $stmt->execute($params); ``` このやり方だと、userテーブルのidとprofileテーブルのuser_idにズレが生じてしまう事はありますか? また、確実にidとuser_idを同じにする方法等ありますか? 他に効率の良い書き方や考え方などありましたらどなたか教えてください。
回答: おそらくこの作りだとオートインクリメントを設定されているのだと思います。 マニュアルから、注意事項はありますが、 > > 注意: > > このメソッドは、異なる PDO ドライバ間で意味のあるもしくは 一貫性のある結果を返さないかも知れません。 構成しているデータベースが自動インクリメントフィールド、 もしくはシーケンスの概念をサポートしていないかも知れないためです > > > MySQLは該当の「自動インクリメント」をサポートしているため、一貫性のある結果を必ず返すものと思われます。 少なくとも私の場合は、同等の作りでずれた経験はありません。 下記のような実験記事もあります。 * MySQL小ネタ/複数行インサート時のLAST_INSERT_ID() もし万が一を懸念されているのであれば、事前にシステム側で払いだしたIDを両方に当てると良いです。 max()+1をするとか(最終行が削除されると面倒なことが起きるのでこれはあまり推奨されません)、 再帰で重複しないランダムなIDを出すとか、色々方法はあります。