Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/05/2016, 07:14
Avatar de Benderzuelo
Benderzuelo
 
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 11 años, 5 meses
Puntos: 5
Busqueda Después de un UPDATE no continúa WHILE

Hola amig@s,

tengo un problema que no consigo resolver, tengo el siguiente SCRIPT

Código PHP:
Ver original
  1. $sql = "SELECT rn.*, s.saldo FROM renovaciones rn
  2.             LEFT JOIN saldo s
  3.             ON s.idUsuario = rn.idUsuario
  4.             AND rn.activo = 1";
  5.             $cnx = new Mysql(_SERVER, _USER, _PASSWORD, _BBDD);
  6.            
  7.             $periodo = array('0'=>0, '1'=>'1 HOUR', '2'=>'2 HOUR', '3'=>'3 HOUR', '4'=>'4 HOUR', '5'=>'5 HOUR', '6'=>'6 HOUR', '10'=>'1 DAY', '100'=>'2 DAY');
  8.             $intervalo = '';
  9.            
  10.             if($cnx->ejecutaSql($sql)){
  11.                 //Recorro todos los resultado
  12.                 while($row = $cnx->asociaFilas()){
  13.                     //Si su saldo es mayor o igual a 0.30 que es el mínimo, renuevo si no no.
  14.                     if($row['saldo'] >= 0.3 && $row['saldo'] != NULL){
  15.                         //Preparo el intervalo dinámico para la consulta desde el array anterior
  16.                         $intervalo = $periodo[$row['periodo']];
  17.                         //Si la fecha de configuración y la de renovado son iguales es porque aún no ha renovado nunca
  18.                         if($row['fecha'] == $row['fechaRenovado']){
  19.                             //Entonces renuevo sin comprobar el intervalo
  20.                             $sqlUpdate = "UPDATE renovaciones SET fechaRenovado = now() WHERE idUsuario = ".$row['idUsuario']." AND idAnuncio = ".$row['idAnuncio'];
  21.                         }else{
  22.                             //Si no compruebo el intervalo para renovar de nuevo
  23.                             $sqlUpdate = "UPDATE renovaciones SET fechaRenovado = now() WHERE idUsuario = ".$row['idUsuario']." AND idAnuncio = ".$row['idAnuncio']." AND NOW() >= DATE_ADD(fechaRenovado, INTERVAL ".$intervalo.") ";
  24.                         }
  25.                         //Preparo las consultas para actualizar el anuncio y el saldo del cliente
  26.                         $sqlUpdateAnuncio = "UPDATE anunciosCV SET time = ".time()." WHERE idUsuario = ".$row['idUsuario']." AND idAnuncio = ".$row['idAnuncio'];
  27.                         $sqlUpdateSaldo = "UPDATE saldo SET saldo = ROUND(saldo-0.3,1) WHERE idUsuario = ".$row['idUsuario'];
  28.                         //Si actualiza la renovacion entonces continuo si no muestro el fallo
  29.  
  30.  
  31.                                                  //EN ESTA CONSULTA DEJA DE IR EL WHILE, PERO LA CONSULTA ES CORRECTA
  32.  
  33.                         if($cnx->ejecutaSql($sqlUpdate)){
  34.                             //Si hay filas afectadas es por que el intervalo se ha cumplido si no muestro error
  35.                             if($cnx->filasAfectadas() == 1){
  36.                                 //echo $cnx->filasAfectadas();
  37.                                 //Si actualiza el anuncio continuo si no muestro fallo
  38.                                 if($cnx->ejecutaSql($sqlUpdateAnuncio)){
  39.                                     //Actualizo tabla de saldos
  40.                                     if($cnx->ejecutaSql($sqlUpdateSaldo)){
  41.                                         echo 'Actualizado el anuncio '.$row['idAnuncio']." del Usuario ".$row['idUsuario'].' en el intervalo '.$intervalo.'<br>';
  42.                                     }else{
  43.                                         echo 'Actualizado el anuncio '.$row['idAnuncio']." del Usuario ".$row['idUsuario'].' en el intervalo '.$intervalo.' pero no se descontó el saldo<br>'.$sqlUpdateSaldo;
  44.                                     }
  45.                                 }else{
  46.                                     echo 'Falla la consulta'.$sqlUpdate.'<br>';
  47.                                 }
  48.                             }else{
  49.                                 echo 'No se actualiza por no cumplir el intervalo '.$intervalo.' con la consulta '.$sqlUpdate.'<br>';
  50.                             }
  51.                         }else{
  52.                             echo 'Falla la consulta'.$sqlUpdateAnuncio.'<br>';
  53.                         }
  54.                     }else{
  55.                         echo 'El Usuario '.$row['idUsaurio'].' no tiene saldo, el intervalo es '.$intervalo.'.<br>';
  56.                     }
  57.                 }
  58.             }else{
  59.                 echo 'Falla la consulta '.$sql.'<br>';
  60.             }

En la consulta que he marcado en MAYÚSCULAS , si se ejecuta el update, no continúa con el WHILE, hay 3 registros para las pruebas y deberá de actualizar o no.. 3 registros, pero después de realizar la consulta no continua el WHILE, y la consulta está bien porque la imprimo y la compruebo directamente en phpmyadmin y va perfecta.

Si hay un echo 'vueltas' antes de ejecutar esa consulta y evidentemente en el código omito la consulta, me imprime 3 vueltas, sin embargo si no la omito solo da una vuelta.

He comprobado todas las consultas y todas van bien, se ejecutan y todo bien pero en la acción se corta el while..

A alguien se le ocurre algo?

Muchas gracias por adelantado.