tengo un problema que no consigo resolver, tengo el siguiente SCRIPT
Código PHP:
Ver original
$sql = "SELECT rn.*, s.saldo FROM renovaciones rn LEFT JOIN saldo s ON s.idUsuario = rn.idUsuario AND rn.activo = 1"; $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'); $intervalo = ''; if($cnx->ejecutaSql($sql)){ //Recorro todos los resultado while($row = $cnx->asociaFilas()){ //Si su saldo es mayor o igual a 0.30 que es el mínimo, renuevo si no no. if($row['saldo'] >= 0.3 && $row['saldo'] != NULL){ //Preparo el intervalo dinámico para la consulta desde el array anterior $intervalo = $periodo[$row['periodo']]; //Si la fecha de configuración y la de renovado son iguales es porque aún no ha renovado nunca if($row['fecha'] == $row['fechaRenovado']){ //Entonces renuevo sin comprobar el intervalo $sqlUpdate = "UPDATE renovaciones SET fechaRenovado = now() WHERE idUsuario = ".$row['idUsuario']." AND idAnuncio = ".$row['idAnuncio']; }else{ //Si no compruebo el intervalo para renovar de nuevo $sqlUpdate = "UPDATE renovaciones SET fechaRenovado = now() WHERE idUsuario = ".$row['idUsuario']." AND idAnuncio = ".$row['idAnuncio']." AND NOW() >= DATE_ADD(fechaRenovado, INTERVAL ".$intervalo.") "; } //Preparo las consultas para actualizar el anuncio y el saldo del cliente $sqlUpdateAnuncio = "UPDATE anunciosCV SET time = ".time()." WHERE idUsuario = ".$row['idUsuario']." AND idAnuncio = ".$row['idAnuncio']; $sqlUpdateSaldo = "UPDATE saldo SET saldo = ROUND(saldo-0.3,1) WHERE idUsuario = ".$row['idUsuario']; //Si actualiza la renovacion entonces continuo si no muestro el fallo //EN ESTA CONSULTA DEJA DE IR EL WHILE, PERO LA CONSULTA ES CORRECTA if($cnx->ejecutaSql($sqlUpdate)){ //Si hay filas afectadas es por que el intervalo se ha cumplido si no muestro error if($cnx->filasAfectadas() == 1){ //echo $cnx->filasAfectadas(); //Si actualiza el anuncio continuo si no muestro fallo if($cnx->ejecutaSql($sqlUpdateAnuncio)){ //Actualizo tabla de saldos if($cnx->ejecutaSql($sqlUpdateSaldo)){ echo 'Actualizado el anuncio '.$row['idAnuncio']." del Usuario ".$row['idUsuario'].' en el intervalo '.$intervalo.'<br>'; }else{ echo 'Actualizado el anuncio '.$row['idAnuncio']." del Usuario ".$row['idUsuario'].' en el intervalo '.$intervalo.' pero no se descontó el saldo<br>'.$sqlUpdateSaldo; } }else{ echo 'Falla la consulta'.$sqlUpdate.'<br>'; } }else{ echo 'No se actualiza por no cumplir el intervalo '.$intervalo.' con la consulta '.$sqlUpdate.'<br>'; } }else{ echo 'Falla la consulta'.$sqlUpdateAnuncio.'<br>'; } }else{ echo 'El Usuario '.$row['idUsaurio'].' no tiene saldo, el intervalo es '.$intervalo.'.<br>'; } } }else{ echo 'Falla la consulta '.$sql.'<br>'; }
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.