sql >> Databáze >  >> RDS >> Mysql

Jak mohu použít připravené výpisy v kombinaci s Transakcemi s PHP?

Po zavolání "beginTransaction" zavolejte "execute".

Kde nazýváte „připravte se“, je vlastně jedno.

Zde je úplný příklad:

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

PŘÍKLAD:

 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) Předpokládám samozřejmě, že $user_input a $user_input_2 jsou okamžitě dostupné. Nechcete, aby vaše transakce visela otevřená zbytečně dlouho;)

2) Na základě vaší výše uvedené odpovědi na komentář se domnívám, že si možná pletete „provést“ a „zahájit trans/commit“. Podívejte se prosím na můj odkaz.

3) Potřebuješ to vůbec? transakce? Děláte jen dva "výběry".

4) Nakonec, proč neudělat jedno „připojení“ (nebo spojení, je-li kompatibilní) místo dvou „výběrů“?



  1. Automatické zvýšení sloupce tabulky

  2. Proaktivní kontroly stavu serveru SQL, část 2:Údržba

  3. Použití ODBC se Salesforce a Azure Active Directory (AD) Single Sign On (SSO)

  4. Když zavolám PreparedStatement.cancel() v aplikaci JDBC, skutečně to zabije v databázi Oracle?