繁体   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