所以我正在研究用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。据我所见,我找不到一个。
目前我能想到解决方案的唯一方法是改变我的代码的逻辑,所以它确实利用了交易,如果我可以避免,我会。
非常感谢您的帮助。
答案 0 :(得分:-1)
这两个陈述
我正在研究创建一个MySQLi交易(1)
,我会避免交易
如果我能(2)
看起来对我来说是互斥的。
所以,你的答案很简单,可以基于两个合乎逻辑的结论:
因此,如果您需要,只需开始使用交易。
这就是全部。
答案 1 :(得分:-1)
使用PDO :: lastInsertId()获取最后插入的ID。并将插入分为两个语句[第一个语句插入和另一个更新]。