السلام عليكم ورحمة الله
اريد جعل الايميل و حساب المستخدم لا يتكرر في قاعدة البيانات وشكرا.
استخدم قيد UNIQUE، وهو قيد يضمن أن كل قيمة في عمود معين هي فريدة من نوعها.
ولتطبيق قيد UNIQUE على عمود email وعمود username في جدول users يكون الكود كالتالي:
CREATE TABLE users ( email VARCHAR(255) UNIQUE, username VARCHAR(255) UNIQUE, ... );
وسيتم منع إدخال أي قيم متكررة في عمود email وعمود username، وإذا حاولت إدخال قيمة مكررة في أحد هذه الأعمدة، فستتلقى خطأً من SQL.
أي في حال حاولت إدخال السطر التالي في جدول users:
INSERT INTO users (email, username) VALUES ('example@example.com', 'example');
ستتلقى الخطأ التالي:
ERROR 1062 (23000): Duplicate entry 'example@example.com' for key 'email'
تستطيع أيضًا استخدام قيد UNIQUE لمنع إدخال قيم متكررة في عمود واحد، ومثلاً لمنع إدخال قيم متكررة في عمود email فقط عليك بالآتي:
ALTER TABLE users ADD UNIQUE (email);
وإن حاولت إدخال قيمة مكررة في عمود email، فستتلقى خطأً من SQL، ولنحاول إدخال السطر التالي في جدول users:
INSERT INTO users (email, username) VALUES ('example@example.com', 'example');
ستتلقى الخطأ التالي:
ERROR 1062 (23000): Duplicate entry 'example@example.com' for key 'email'
يمكنك أيضاً استخدام قيد CHECK: يمكن وضع شرط يتحقق قبل إدراج البيانات للتأكد من عدم تكرارها.
مثال:
CREATE TABLE Users ( id INT PRIMARY KEY, email VARCHAR(100), CHECK (NOT EXISTS (SELECT 1 FROM Users WHERE email = email)) );
بهذه الطريقة سيتم منع إدراج أو تحديث أي بريد إلكتروني مكرر.
كما يمكنك استخدام الدالة COUNT() لتحديد ما إذا كانت البيانات مكررة قبل إدخالها. إذا كانت البيانات مكررة، فيمكنك اتخاذ إجراء لمنع إدخال البيانات.
يمكنك استخدام دالة التحقق في التطبيق لمنع تكرار البريد الإلكتروني قبل اضافته في قواعد البيانات,
على سبيل المثال، يمكنك استخدام وظيفة check_unique_email للتحقق مما إذا كان البريد الإلكتروني موجودًا بالفعل في قاعدة البيانات. إذا كان موجودًا بالفعل، فلن تسمح الوظيفة بإدخال البريد الإلكتروني.
function check_unique_email($email) { // إنشاء استعلام SQL $sql = "SELECT COUNT(*) AS count FROM users WHERE email = :email"; // إعداد استعلام SQL $stmt = $pdo->prepare($sql); $stmt->bindParam(':email', $email); // تنفيذ الاستعلام $stmt->execute(); // الحصول على عدد النتائج $count = $stmt->fetchColumn(); // إرجاع النتيجة return $count > 0; }
يمكنك استخدام هذه الدالة قبل إدخال البريد الإلكتروني في قاعدة البيانات ,في طريقة create لنموذج المستخدم:
// إنشاء نموذج المستخدم class UserModel { public function create() { // تحقق مما إذا كان البريد الإلكتروني موجودًا بالفعل if (!check_unique_email($this->email)) { throw new Exception("البريد الإلكتروني موجود بالفعل"); } } }
التعليقات