2016-09-13 8 views
-1

PHPで準備済みの文を使用してMySQLi Transactionを作成します。私はすべての罰金を持っているようだが、問題がある。私のステートメントはお互いに依存しています。例:PHP MySQLi Prepared Statementトランザクション挿入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); 

することができます:外部キー

は2つのプリペアドステートメント、電子メールIDの最初に頼る秒を示しており、以下のコードを参照してくださいよう ユーザーは、メールアドレスのIDを持つユーザテーブルに入力しました私が '$ SHOULD_BE_EMAIL_ID'をどこに置いているかを見てください。そこに問題があります。私が見てきたように、コードのこの時点で最初のクエリがまだ実行されていないので、この値を取得する方法はありません。私にこれを回す方法はありますか?私。そこに電子メールIDを取得できるようにする機能はありますか?私が見る限り、私はそれを見つけることができませんでした。

私は現時点で解決策を考えることができる唯一の方法は、自分のコードのロジックを変更しているので、トランザクションを利用しています。

ご協力いただきありがとうございます。

+0

最後に挿入された要素のAUTOINC IDを取得できます:http://php.net/manual/en/mysqli.insert-id.php –

答えて

-1

私ができる場合、私は(1)
MySQLiのトランザクションを作成するに探しています、これらの二つの文

は、私が取引を回避します(2)

は私には相互排他的なルックス。

だから、あなたの答えは非常にシンプルであり、2つの論理的な結論に基づいてすることができます。

  • あなたはほかのトランザクション
  • を持たずにトランザクションを持つことはできません、クエリを実行せずにクエリを実行することはできません。

したがって、必要に応じてトランザクションを使用してください。

それだけです。

-1

For PDO :: lastInsertId()を使用して最後に挿入されたIDを取得します。そして、挿入を二つのステートメント(最初のステートメント挿入ともう一つの更新)に分けてください。

関連する問題