sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo usar declaraciones preparadas combinadas con Transacciones con PHP?

Simplemente llame a "ejecutar" después de llamar a "beginTransaction".

Donde llames "preparar" realmente no importa.

He aquí un ejemplo completo:

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

EJEMPLO:

 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";
  }

PD:1) Asumo, por supuesto, que $user_input y $user_input_2 están disponibles de inmediato. No desea que su transacción permanezca abierta innecesariamente por mucho tiempo;)

2) Según la respuesta de su comentario anterior, creo que podría estar confundiendo "ejecutar" y "comenzar tran/commit". Por favor mira mi enlace.

3) ¿Incluso necesitas una transacción? Solo estás haciendo dos "selecciones".

4) Finalmente, ¿por qué no hacer una "unión" (o unión, si es compatible) en lugar de dos "seleccionar"?