簡體   English   中英

PHP MySQLi 准備好的語句事務插入 ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM