sql >> データベース >  >> RDS >> Mysql

PHPを使用したトランザクションと組み合わせてプリペアドステートメントを使用するにはどうすればよいですか?

    「beginTransaction」を呼び出した後、「execute」を呼び出すだけです。

    「準備」と呼ぶ場所は実際には重要ではありません。

    完全な例は次のとおりです:

    http://php.net/manual/en/pdo.begintransaction.php

    例:

     try {
        $cnx = new PDO($dsn,$dbuser,$dbpass);   
        $cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
        $cnx->beginTransaction();
    
        $stmt=$cxn->prepare("SELECT * FROM users WHERE username=?");
        $stmt->execute(array($user_input));
    
        $stmt_2=$cxn->prepare("SELECT * FROM othertable WHERE some_column=?");
        $stmt_2->execute(array($user_input_2));
    
        $cnx->commit();
      }
      catch (Exception $e){
        $cxn->rollback();
        echo "an error has occurred";
      }
    

    PS:1)もちろん、$user_inputと$user_input_2はすぐに利用できると思います。トランザクションが不必要に長く開いたままになるのは望ましくありません;)

    2)上記のコメントの返信から、「実行」と「トラン/コミットの開始」を混同しているのではないかと思います。私のリンクを見てください。

    3)必要もありますか トランザクション? 2つの「選択」を実行しているだけです。

    4)最後に、2つの「選択」の代わりに1つの「結合」(または互換性がある場合は結合)を実行してみませんか?



    1. Mysqlクラスター化インデックスをどのように作成しますか?

    2. WordPressの単一エンドポイントで高可用性PostgreSQLをデプロイする方法

    3. 日付と時間の範囲で教室の利用可能な時間を取得する

    4. 簡単な用語でのDATEADD、DATEDIFF、およびDATEPARTT-SQL関数の使用