estado rascándose la cabeza en esto por un tiempo ....PDO :: ATTR_AUTOCOMMIT ignora INSERT no transaccional/ACTUALIZACIÓN
Tengo un objeto de orden de pago pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);
como yo quiero usar FOR UPDATE
con algunas tablas InnoDB. La lectura de la documentación de MySQL, FOR UPDATE
solamente se bloqueará filas de lectura si:
- Usted está en una transacción
- Usted no está en una transacción y
set autocommit=0
ha sido declarada
Por lo tanto, yo soy usando ATTR_AUTOCOMMIT
para permitir que el objeto PDO bloquee filas. En cualquier caso, esto hace que las instrucciones INSERT y UPDATE no se apliquen. Estas declaraciones no tienen nada que ver con FOR UPDATE
, solo están ejecutando el mismo objeto PDO con declaraciones preparadas.
Mi registro de consultas MySQL parece:
xxx Connect [email protected]
xxx Query set autocommit=0
xxx Query INSERT INTO foo_tbl (bar, baz) VALUES ('hello','world')
xxx Quit
PHP/DOP no se quejan, pero la selección de la tabla muestra que los datos no se ha escrito.
Las consultas que estoy ejecutando se han ejecutado miles de veces antes; solo se ha realizado el cambio ATTR_AUTOCOMMIT
. Al eliminar esa opción, todo vuelve a funcionar. Las transacciones funcionan bien con la opción autocommit=0
también.
¿Hay otras llamadas que es necesario hacer en el objeto PDO (commit()
se queja con razón de que no está en una transacción) para hacer que los cambios se queden? Básicamente, quiero un objeto PDO simple pero con la opción de bloquear filas fuera de las transacciones para tablas InnoDB (el fondo de por qué es demasiado largo y aburrido aquí).
Estoy seguro de que esto es algo estúpido que me falta arañazos cabeza
No se preocupe, todos extrañamos cosas a veces! Sé que me pasa mucho más de lo que me gustaría admitir :-) – Josh