[英]PHP MySQLi Prepared Statement Transaction Insert ID
所以我正在研究用 PHP 中的准備好的語句創建一個 MySQLi 事務。 我的想法似乎很好,但是我有一個問題。 我的陳述相互依賴。 例如:
電子郵件地址輸入電子郵件表。 用戶以電子郵件地址 ID 作為外鍵進入用戶表
請參閱下面的代碼,其中顯示了兩個准備好的語句,第二個依賴於第一個作為電子郵件 ID:
//$email_sql
if(!($stmt = $mysqli->prepare($email_sql))) throw new \Exception("[mysqli] Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error);
if(!($stmt->bind_param('s', $email)) throw new \Exception("[mysqli] Bind Params failed: (" . $mysqli->errno . ") " . $mysqli->error);
//$user_sql
if(!($stmt = $mysqli->prepare($user_sql))) throw new \Exception("[mysqli] Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error);
if(!($stmt->bind_param('i', $SHOULD_BE_EMAIL_ID)) throw new \Exception("[mysqli] Bind Params failed: (" . $mysqli->errno . ") " . $mysqli->error);
你可以看到我把“$SHOULD_BE_EMAIL_ID”放在哪里,問題就在這里。 正如我所見,我無法獲取此值,因為此時代碼中的第一個查詢尚未執行。 我有辦法繞過這個嗎? 即是否有任何功能可以讓我在那里獲取電子郵件 ID。 據我所知,我還沒有找到一個。
目前我能想到解決方案的唯一方法是更改我的代碼邏輯,因此它確實利用了事務,如果我可以避免,我會這樣做。
非常感謝您的幫助。
這兩種說法
我正在考慮創建一個 MySQLi 事務 (1)
如果可以,我會避免交易(2)
對我來說看起來相互排斥。
因此,您的答案非常簡單,可以基於兩個合乎邏輯的結論:
所以,如果你需要它們,就開始使用它們。
就這樣。
用於使用 PDO::lastInsertId() 獲取最后插入的 ID。 並將插入分成兩個語句[使第一個語句插入和另一個更新]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.