【问题标题】:PHP MySQLi Prepared Statement Transaction Insert IDPHP MySQLi Prepared Statement 事务插入 ID
【发布时间】:2016-09-13 11:27:04
【问题描述】:

所以我正在研究用 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”,这就是问题所在。如我所见,我无法获取此值,因为此时代码中尚未执行第一个查询。我有办法解决这个问题吗? IE。是否有任何功能可以让我在那里获取电子邮件 ID。据我所知,我一直找不到。

目前我能想到解决方案的唯一方法是更改​​我的代码逻辑,因此它确实利用了事务,如果可以避免,我会这样做。

非常感谢您的帮助。

【问题讨论】:

标签: php mysqli transactions prepared-statement


【解决方案1】:

这两条语句

我正在研究创建一个 MySQLi 事务 (1)
如果可以的话,我会避免交易(2)

在我看来是互斥的。

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

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

所以,如果需要,就开始使用事务吧。

就是这样。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      相关资源
      最近更新 更多