8
votes

MySQL Valider les enregistrements de messagerie

Je sais que vous pouvez utiliser PHP Email Valider des filtres pour vérifier si les données sont ABC @ ABC. ext

Y a-t-il de toute façon que je puisse exécuter une requête MySQL pour le faire, vérifier uniquement ce format de style. Sinon, je devrai faire une pagination et charger un script de limite équilibré pour sélectionner tous les enregistrements à partir de la DB (50 000+) et le serveur est déjà lent pour mon client sur l'hébergement partagé.

Je veux juste voir une liste des e-mails valides et je peux également vérifier les doublons ou les similitudes avec comme requête?

Appréciez toute collaboration à ce sujet.


6 commentaires

C'est pourquoi nous validons les données avant qu'il ne passe dans la DB = \


Mon client vient de recevoir une protection XSS et un filtre_validate_email de moi-même. Juste à la recherche d'une solution. Je suis au courant de ça merci!


Pourquoi avez-vous besoin de pagination pour cette opération ponctuelle? Je ne comprends pas tes raisons


@ Col.shrapnel hi; Je pensais que la chargement de 50 000 champs dans le navigateur apportera une grande fenêtre et écrase le serveur et le rend lentement. Alors la pagination réduirait que l'utilisation de la limite ...


Quel est le point dans le chargement de 50 000 champs dans le navigateur ?! Qu'est-ce que tu vas faire avec tous?


Vous ne vous êtes pas compté. C'est pourquoi je veux faire cela avec MySQL. J'ai dit pagination et faire une page en dernier recours que je pourrais utiliser si sinon filtres et filtre_validate_email filtres dans le PHP tandis que la boucle. MySQL serait mieux pour moi, car je peux exporter les données au format CSV ou XML ... etc.


5 Réponses :


12
votes

Vous pouvez utiliser quelque chose comme celui-ci

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


2 commentaires

Plus un pour l'effort, j'ai utilisé cela comme compilateur de requête supplémentaire pour ce qui précède.


Oui parce que j'ai utilisé cela pour une validation rapide et des déménagements en plus de ce qui précède. Je pense que je vais faire une page PHP aussi juste pour être sûr que je reçois des courriels propres et avec les nouveaux formulaires d'inscription. Ce serait la meilleure approche.



18
votes

Quelque chose comme ça xxx

ou xxx

mise à jour. C'est juste un exemple, comment utiliser une expression régulière dans MySQL.


7 commentaires

Est-ce que cela supprimera www.site.john@site.com ou www.hayley.smith@www.mail.com - certains courriels étranges! même eu des vides; Numéros mobiles, mots de passe sans MD5 et tant de choses que vous pouvez imaginer dans le champ email!


Oui Bonne idée Utilisation de MySQL Regex :) Voir ce tutoriel http://www.mysqlTutorial.org/mysql-regular-expression-regexp .aspx


C'est juste un exemple de rééglementation dans MySQL.Vous pouvez écrire votre propre regexp :)


@TheBlackBenzKid: Ce sont des adresses e-mail admissibles, je ne vois pas votre problème avec eux.


... et des quads en pointillés et des domaines avec plus de 2 parties et le reste des caractères autorisés dans un nom de boîte aux lettres ... IIRC MySQL utilise un analyseur POSIX - pour PCRE, j'utilise '^ [A-Z0-9 \ ._% +! $ & * = ^ | ~ #% \ '`? {} / \ -] + @ [A-Z0-9 \ .-] + \. [AZ] {2,6} $ $ {2,6} $ "


Ça n'existe pas. Je ne trouve pas la référence ici pour le sarcasme. Mais happelé votre commentaire, peu importe. @ Col.shrapnel


@TheBlackBenzKid: Non? Comment reviendra-t-il la vie en 2000? Le domaine .museum a été introduit en 2001, ainsi que .Travel : EN.Wikipedia.org/wiki/.Museum d'où je suppose, c'est dix ans .



-1
votes

Utilisez celui-ci, il vérifiera où devrait être un "@" et "". dans l'email. Ceci est testé un.

Sélectionnez * à partir de école e-mail pas regener '^ [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} $ '';


1 commentaires

N'utilisez pas cela. Trop de faux positifs utilisant cette regex. Des courriels comme foo-foo123@foomail.com sont attrapés et c'est une adresse email valide.



1
votes

Exécutez ce SQL pour créer un déclencheur à l'intérieur de la base de données MySQL, cela empêchera d'insérer un courrier électronique formaté à tort: ​​

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


0 commentaires

0
votes

Comme d'autres personnes ont mentionné, vous pouvez utiliser une regex pour valider les courriels, mais avec une précision limitée.

-- you could, but not recommended
SELECT * FROM users WHERE email NOT REGEXP '^[^@]+@[^@]+\.[^@]{2,}$';


0 commentaires