Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment puis-je utiliser des instructions préparées combinées avec des transactions avec PHP ?

Appelez simplement "execute" après avoir appelé "beginTransaction".

L'endroit où vous appelez "préparer" n'a pas vraiment d'importance.

Voici un exemple complet :

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

EXEMPLE :

 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) Je suppose, bien sûr, que $user_input et $user_input_2 sont disponibles immédiatement. Vous ne voulez pas que votre transaction reste ouverte inutilement longtemps ;)

2) Sur la base de votre réponse au commentaire ci-dessus, je pense que vous confondez peut-être "exécuter" et "commencer tran/commit". Veuillez regarder mon lien.

3) Avez-vous même besoin une opération ? Vous faites juste deux "select's".

4) Enfin, pourquoi ne pas faire un "join" (ou union, si compatible) au lieu de deux "select's" ?