Pues yo te haría dos observaciones:
1) Las fechas no son "parecidas a" (LIKE), los meses, días y años son
magnitudes escalares, y como tales son menores, iguales, mayores o están dentro de un rango, pero
nunca son "parecidas".
El uso de LIKE en una comparación de valores numéricos hace que MySQL genere conversiones implícitas a cadena de texto, con resultados impredecibles y/o falsos. LIKE
no está definido para magnitudes esclares, sino caracteres. No lo olvides.
2) En MySQL existe un modo más simple, dada la consulta que haces, sobre una sola columna, que te puede permitir evitar tener que realizar el while() en PHP.
Yo plantearía algo parecido a:
Código PHP:
Ver originalpublic function destinatarios($a,$p,$m,$d) {
//Consulta para listar los correos con los filtros que necesito. Al fina el REGEXP me permite filtrar que los correos cumplan el formato
$sql ="SELECT GROUP_CONCAT(DISTINCT correo_electronico) email ";
$sql .="FROM egresado e INNER JOIN registro_grado re ON e.identificacion = re.identificacion ";
$sql .=" AND re.id_programa like '$p%' ";
$sql .=" AND YEAR(fecha_grado) = $a ";
$sql .=" AND MONTH(fecha_nacimiento) = $m ";
$sql .=" AND DAY(fecha_nacimiento)= $d ";
$sql .=" AND correo_electronico REGEXP '[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'";
//tengo el resultado si resulta menor que '0' me retorna falso de lo contrario continua
$email = "";
$email=$fila['email'];
//acontinuacion se hace la separación por comas "," o lo que se desee
return $email;
}
return FALSE;
}