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