【发布时间】: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。据我所知,我一直找不到。
目前我能想到解决方案的唯一方法是更改我的代码逻辑,因此它确实利用了事务,如果可以避免,我会这样做。
非常感谢您的帮助。
【问题讨论】:
-
MySQLi 让您获得最后插入元素的 AUTOINC ID:php.net/manual/en/mysqli.insert-id.php
标签: php mysqli transactions prepared-statement