2016-09-13 2 views
-1

Итак, я ищу создание транзакции 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', есть проблема. Как я могу видеть, для меня нет способа получить это значение, поскольку первый запрос еще не был выполнен в этот момент кода. Есть ли способ обойти это? То есть есть ли какие-либо функции, которые позволят мне получить там идентификатор электронной почты. Насколько я могу судить, я не смог его найти.

Единственный способ, которым я могу думать о решении на данный момент, заключается в изменении логики моего кода, поэтому он использует транзакции, которые, если я могу избежать, я это сделаю.

Большое спасибо за помощь.

+0

MySQLi позволяет получить идентификатор AUTOINC последнего вставленного элемента: http://php.net/manual/en/mysqli.insert-id.php –

ответ

-1

Эти два заявления

Я изучающие создать MySQLi Transaction (1)
я буду избегать сделок, если я могу (2)

кажется взаимоисключающими мне.

Итак, ваш ответ очень прост и может быть основана на двух логических выводов:

  • вы не можете иметь сделку, не имея сделку
  • кроме того, вы не можете выполнить запрос без выполнения запроса.

Итак, начните использовать транзакции, если они вам понадобятся.

Это все.

-1

Для получения последнего вставленного идентификатора с использованием PDO :: lastInsertId(). И разделите вставку на два оператора [сделанные вставку 1-го оператора и другое обновление].

 Смежные вопросы

  • Нет связанных вопросов^_^