Hola amig@s,
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";
$cnx = new Mysql(_SERVER
, _USER
, _PASSWORD
, _BBDD
);
$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.