sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg bruge forberedte erklæringer kombineret med Transaktioner med PHP?

Kald bare "execute", efter du har kaldt "beginTransaction".

Hvor du kalder "forbered" er ligegyldigt.

Her er et komplet eksempel:

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

EKSEMPEL:

 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) Jeg går selvfølgelig ud fra, at $user_input og $user_input_2 er tilgængelige med det samme. Du ønsker ikke, at din transaktion skal hænge unødigt længe åben;)

2) Baseret på dit kommentarsvar ovenfor, tror jeg, at du måske forveksler "eksekvere" og "begynd at overføre/forpligte". Se venligst mit link.

3) Har du overhovedet brug for en transaktion? Du laver bare to "select's".

4) Til sidst, hvorfor ikke lave én "join" (eller union, hvis den er kompatibel) i stedet for to "select'er"?



  1. rake db:create genereret, hvis du indstiller tegnsættet manuelt, sørg for at du har en matchende sorteringsfejl

  2. Vil SQL-opdatering påvirke dens underforespørgsel under opdateringskørsel?

  3. MySQL - Erstat tegn i kolonner

  4. Brug af JDeveloper med MySQL-database og Oracle-database på AWS RDS, del 1