sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag använda förberedda uttalanden i kombination med Transaktioner med PHP?

Anrop bara "execute" efter att du anropat "beginTransaction".

Var du kallar "förbered" spelar egentligen ingen roll.

Här är ett komplett exempel:

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

EXEMPEL:

 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) Jag antar naturligtvis att $user_input och $user_input_2 är tillgängliga omedelbart. Du vill inte att din transaktion ska vara öppen onödigt länge;)

2) Baserat på ditt kommentarsvar ovan tror jag att du kan blanda ihop "exekvera" och "börja överföra/besluta". Titta gärna på min länk.

3) Har du ens behöver en transaktion? Du gör bara två "selects".

4) Slutligen, varför inte göra en "join" (eller fackförening, om den är kompatibel) istället för två "utvalda"?



  1. PHP 7 kan inte hitta MySQLi

  2. Hur länkar man dockercontainrar på build?

  3. SQL:Hur man slår samman skiftlägesokänsliga dubbletter

  4. Lagrade procedurer/DB-schema i källkontroll