Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich vorbereitete Anweisungen in Kombination mit Transaktionen mit PHP verwenden?

Rufen Sie einfach "execute" auf, nachdem Sie "beginTransaction" aufgerufen haben.

Wo Sie "vorbereiten" nennen, spielt keine Rolle.

Hier ist ein vollständiges Beispiel:

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

BEISPIEL:

 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) Ich gehe natürlich davon aus, dass $user_input und $user_input_2 sofort verfügbar sind. Sie möchten nicht, dass Ihre Transaktion unnötig lange offen bleibt;)

2) Basierend auf Ihrer Kommentarantwort oben, denke ich, dass Sie "execute" und "begin tran/commit" verwechseln könnten. Bitte schau dir meinen Link an.

3) Brauchen Sie überhaupt Brauchen eine Transaktion? Sie machen nur zwei "Auswählen".

4) Warum nicht ein "join" (oder union, falls kompatibel) anstelle von zwei "select's"?