Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como posso usar instruções preparadas combinadas com transações com PHP?


Basta chamar "execute" depois de chamar "beginTransaction".

Onde você chama "preparar" realmente não importa.

Aqui está um exemplo completo:

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

EXEMPLO:
 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) Estou assumindo, é claro, que $user_input e $user_input_2 estejam disponíveis imediatamente. Você não quer que sua transação fique aberta desnecessariamente por muito tempo;)

2) Com base na sua resposta ao comentário acima, acho que você pode estar confundindo "execute" e "begin tran/commit". Por favor, veja meu link.

3) Você ainda precisa uma transação? Você está apenas fazendo dois "select's".

4) Por fim, por que não fazer um "join" (ou união, se compatível) em vez de dois "select's"?