2011-12-01 282 views
5

sé puede utilizar PHP Filtros de correo electrónico Validar para comprobar si los datos son abc @ abc . extMySQL Validar correo electrónico Records

¿Hay alguna forma de ejecutar una consulta MySQL para ello, active sólo para ese formato de estilo. De lo contrario, tendré que hacer una paginación y cargar la secuencia de comandos de límite equilibrado para seleccionar todos los registros de la base de datos (50,000+) y el servidor ya es lento para mi cliente en el alojamiento compartido.

Solo quiero ver una lista de solo correos electrónicos válidos y también puedo verificar si hay duplicados o similitudes con la consulta like?

Apreciar cualquier colaboración en esto.

+1

es por eso que validar los datos antes de entrar en la db = \ – dqhendricks

+0

Mi cliente sólo acaba de conseguir la protección XSS y también FILTER_VALIDATE_EMAIL de mí mismo. Solo buscando una solución. ¡Estoy enterado de esto gracias! – TheBlackBenzKid

+0

¿por qué necesita paginación para esta operación de una sola vez? No entiendo tus razones –

Respuesta

13

Somethis como este

SELECT * FROM users WHERE email NOT REGEXP '^[^@][email protected][^@]+\.[^@]{2,}$'; 

O

SELECT * FROM users WHERE email NOT REGEXP '^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$'; 

Actualización. Es solo un ejemplo, cómo usar expresiones regulares en Mysql.

+0

¿Esto eliminará [email protected] o [email protected] etc.? ¡Algunos correos electrónicos extraños! incluso obtuve vacíos; ¡números de móvil, contraseñas sin MD5 y tantas cosas que te puedes imaginar en el campo del correo electrónico! – TheBlackBenzKid

+4

¿qué pasa con el dominio '.museum'? –

+1

Sí, buena idea ** Usar mysql regex:) ** Ver este tutorial 'http: // www.mysqltutorial.org/mysql-regular-expression-regexp.aspx' – SamarLover

9

se puede usar algo como esto

SELECT * FROM your_table 
WHERE email_col LIKE '%@%.%' 

para obtener (bastante) correos electrónicos válidos, excluyendo los que están mal seguro.
Pero usted debe comprobar los resultados para estar seguro de lo que estás mostrando ...
De todos modos, este es un punto de partida ...

+0

Además de uno por el esfuerzo, lo he usado como compilador de consultas adicionales para lo anterior. – TheBlackBenzKid

+0

@TheBlackBenzKid: gracias;) – Marco

+0

Sí porque utilicé esto para la validación y eliminación rápida además de lo anterior. Creo que también haré una página PHP para asegurarme de recibir correos electrónicos limpios y junto con los nuevos formularios de registro. Este sería el mejor enfoque. – TheBlackBenzKid

0

Utilice este, verificará dónde debería haber una '@' y '.' en el correo electrónico Esto está probado uno.

SELECT * FROM school DONDE NO email REGEXP '^ [a-zA-Z0-9] [a-zA-Z0-9. -] * [a-zA-Z0-9. -] @ [a-zA-Z0-9] [a-zA-Z0-9 ._-] * [a-zA-Z0-9] \. [A-zA-Z] {2,4} $ ';

0

Igual que @Oyeme pero necesito modificar \. por [\.] y no sé por qué. Si no prueba @ test, com sigue siendo considerado como válido ...

SELECT * FROM users WHERE email NOT REGEXP '^[A-Z0-9._%-][email protected][A-Z0-9.-]+[\.][A-Z]{2,4}$';

PD: no puedo comentar su respuesta debido a la reputación

1

Ejecutar este SQL para crear gatillo dentro de bases de datos MySQL, Esto evitará la inserción de correo electrónico con formato incorrecto:

CREATE DEFINER=`root`@`localhost` TRIGGER `users_before_insert` BEFORE INSERT ON `users` FOR EACH ROW BEGIN 
IF (NEW.`email` REGEXP '^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$')=0 THEN 
     SIGNAL SQLSTATE VALUE '45000' 
      SET MESSAGE_TEXT = '[table:users] - `email` incorrect format!'; 
    END IF; 
END 
Cuestiones relacionadas