Foros del Web » Programando para Internet » PHP »

Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

Estas en el tema de Mysqli_Multi_Query nunca falla. (Problema no una alabanza) en el foro de PHP en Foros del Web. Hola gente del foro, veran tengo un problema utilizo Mysqli_Multi_Query, y , supongamos que le envio 3 consultas (por dar un ejemplo) dos UPDATE y ...
  #1 (permalink)  
Antiguo 01/10/2012, 09:18
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

Hola gente del foro, veran tengo un problema utilizo Mysqli_Multi_Query, y , supongamos que le envio 3 consultas (por dar un ejemplo) dos UPDATE y un SELECT.
si los uptade y el select estan bien funciona correctamente. (valla novedad )
si todas las consultas (los update y el select) dan error devuelve error(logico no? )

pero mi problema es que si una de las consultas(no todas sino una sola) esta mal DEVULVE COMO QUE ESTA TODO BIEN!

y dado que todas las consultas tienen alguna relacion entre si, es imposible de depurar, como se puede saber si alguna de las consultas dio error en la funcion mysqli_multi_query?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 01/10/2012, 10:12
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

Por que no usas excepciones ? tal vez esto solucione tu problema...!
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 01/10/2012, 10:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

¿Porque no usas una transacción? Para eso se supone que son para darte ese control granular y poder hacer un rollback en caso de ser necesario...
  #4 (permalink)  
Antiguo 01/10/2012, 10:30
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

hola gracias por responder,
Cita:
Por que no usas excepciones ?
jotaincubus como seria eso? podrias darme un ejemplo o algun link para leer por favor.
Cita:
¿Porque no usas una transacción? Para eso se supone que son para darte ese control granular y poder hacer un rollback en caso de ser necesario...
GatorV parece que sabes bastante mas que yo desconosco completamente a que le llamas transaccion, ahora buscare en google las dos opciones sugeridas pero podrias tambien explicarme que son y como funcionan o enviarme lgun link para revisar?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 01/10/2012, 10:35
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años, 6 meses
Puntos: 394
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

si mal no entiendo a GatorV las transacciones serian

transaccion1
si transaccion1 ok
transaccion2
si transaccion2 ok
transaccion3

lo de las excepciones es

try
transaccion1
transaccion2
transaccion3
ejecutar
catch
rollback

Pero espero la respuesta de GatorV para ver si lo de las excepciones funcionaria en este caso ;)
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #6 (permalink)  
Antiguo 01/10/2012, 10:47
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

estube buscando y encontre este tema en el que participastes http://www.forosdelweb.com/f18/manej...o-hago-899358/
utilizando PDO, el tema es que yo uso estilo orientado a prosedimientos, y si bien php permite mezclarlos preferiria no hacerlo mas de lo indispensable, habria alguna forma de hacerlo de esta otra manera?

las transacciones me convencen mas porque es algo de la bd, pero solo funcan en innobdb (corrijanme si me equivoco) que desventajas tengo si me paso de myisam a innobdb ?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 01/10/2012, 10:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

Las transacciones es un concepto que se maneja a nivel BD, por defecto Mysqli no usa excepciones, tendrías que hacer un wrapper, es mejor usar PDO que sí soporta excepciones, pero sí en caso básico es eso.

Un bloque try, donde pones todas tus querys, y luego un commit, y un bloque catch para hacer el rollback.

Ten en cuenta que las transacciones es algo muy específico de tu RDBMS, por ejemplo MySQL, solo las soporta en tablas InnoDB, así que verifica el soporte de tu RDBMS primero.

Saludos.
  #8 (permalink)  
Antiguo 01/10/2012, 11:10
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

Bien creo haber entendido (un poco al menos), acabo de escribir esta funcion:

Código PHP:
Ver original
  1. Function Mysqli_Query_Multi($CXNMYSQL,$CON){
  2.         $EST = 'OK';
  3.         $CON = Explode(';',$CON);
  4.         Mysqli_Query($CXNMYSQL,'BEGIN');       
  5.         Foreach ($CON As $POS => $INS) {
  6.             $RES[$POS] = Mysqli_Query($CXNMYSQL,$INS);
  7.             If (!$RES[$POS]) { $EST = 'BAD'; }
  8.         }
  9.         If ($EST == 'BAD') {
  10.             Mysqli_Query($CXNMYSQL,'ROLLBACK');
  11.             $RES = False;
  12.         } Else {
  13.             Mysqli_Query($CXNMYSQL,'COMMIT');
  14.         }
  15.         Return($RES);
  16.     }

que recibe primero la variable de conexion con la base ya seleccionada y segundo la serie de consultas separadas por ';'.
la idea es reemplazar la funcion mysqli_multi_query de php.

les parece que puede funcionar? estoy usando bien los conceptos o estoy errado?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 01/10/2012, 12:12
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Mysqli_Multi_Query nunca falla. (Problema no una alabanza)

SIIIIIIIIIIIII yeah baby logre hacer andar mi funcion dentro del proyecto!!! que bueno que exista este foro para aprender cosas!! (la re emocion ) muchas gracias jotaincubus y GatorV realmente no sabia nada sobre este tema, les dejo karma a los dos y tambien la funcion terminada para que si alguien la quiere usar este disponible:
Código PHP:
Ver original
  1. Function Mysqli_Query_Multi($CXNMYSQL,$CON){
  2.         $EST = 'OK';       
  3.         $CON = Trim($CON);
  4.         If (Substr($CON,-1) == ';') { $CON = Substr($CON,0,-1); }
  5.         $CON = Explode(';',$CON);
  6.         Mysqli_Query($CXNMYSQL,'BEGIN');       
  7.         Foreach ($CON As $POS => $INS) {
  8.             $RES[$POS] = Mysqli_Query($CXNMYSQL,$INS);
  9.             If (!$RES[$POS]) { $EST = 'BAD'; }
  10.         }
  11.         If ($EST == 'BAD') {
  12.             Mysqli_Query($CXNMYSQL,'ROLLBACK');
  13.             $RES = False;
  14.         } Else {
  15.             Mysqli_Query($CXNMYSQL,'COMMIT');
  16.         }
  17.         Return($RES);
  18.     }
Documentacion (breve):
recibe dos paramentros, el primero corresponde a la variable del mysqli_connect(); y la otra con un string con las sentencias, devuelve false en caso de error o en caso de estar todo correcto, el resutado es un array con indice numerico comensando en 0 donde cada posicion contiene el resultado de las consultas, de esta forma se pueden hacer varios select en simultaneo de forma sencilla sin recurrir a subconsultas.

saludos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: falla, mysql, nunca
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:07.