PHP MySQLi准备语句事务插入ID

时间:2016-09-13 11:27:04

标签: php mysqli transactions prepared-statement

所以我正在研究用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。据我所见,我找不到一个。

目前我能想到解决方案的唯一方法是改变我的代码的逻辑,所以它确实利用了交易,如果我可以避免,我会。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:-1)

这两个陈述

  

我正在研究创建一个MySQLi交易(1)
  如果我能(2)

,我会避免交易

看起来对我来说是互斥的。

所以,你的答案很简单,可以基于两个合乎逻辑的结论:

  • 没有交易就无法进行交易
  • 此外,如果不执行查询,则无法执行查询。

因此,如果您需要,只需开始使用交易。

这就是全部。

答案 1 :(得分:-1)

使用PDO :: lastInsertId()获取最后插入的ID。并将插入分为两个语句[第一个语句插入和另一个更新]。