Итак, я ищу создание транзакции MySQLi с подготовленными инструкциями в PHP. Кажется, у меня все в порядке, но у меня проблема. Мои утверждения опираются друг на друга. Например:PHP MySQLi Подготовленный отчет Transaction Insert ID
Адрес электронной почты, указанный в таблице электронной почты. Пользователь вошел в таблицу пользователя с адресом электронной почты 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', есть проблема. Как я могу видеть, для меня нет способа получить это значение, поскольку первый запрос еще не был выполнен в этот момент кода. Есть ли способ обойти это? То есть есть ли какие-либо функции, которые позволят мне получить там идентификатор электронной почты. Насколько я могу судить, я не смог его найти.
Единственный способ, которым я могу думать о решении на данный момент, заключается в изменении логики моего кода, поэтому он использует транзакции, которые, если я могу избежать, я это сделаю.
Большое спасибо за помощь.
MySQLi позволяет получить идентификатор AUTOINC последнего вставленного элемента: http://php.net/manual/en/mysqli.insert-id.php –