سؤال

مرحبًا جميعًا، لدي جدول "المستخدمين" التالي في MySQL:

 CREATE TABLE `users` (
  `uid` int(11) NOT NULL auto_increment,
  `fname` varchar(50) NOT NULL,
  `lname` varchar(50) NOT NULL,
  `role` varchar(75) NOT NULL,
  `region` tinyint(4) unsigned default NULL,
  `username` varchar(25) NOT NULL,
  `password` varchar(75) NOT NULL,
  `new_pass` varchar(5) default NULL,
  PRIMARY KEY  (`uid`),
  UNIQUE KEY `username` (`username`),
  KEY `role` (`role`),
  KEY `region` (`region`),
  CONSTRAINT `users_ibfk_3` FOREIGN KEY (`role`) REFERENCES `role` (`role`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE
 ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8

لقد قمت بتعيين "المنطقة" كمفتاح خارجي لجدول المنطقة - المنطقة. المنطقة "

لاحظ أنه تم تعريف users.region على أنه NULL.كان لدي انطباع بأنه في MySQL، يتم فرض قيد المفتاح الخارجي فقط إذا تم تعيين المفتاح على أنه غير فارغ.

ومع ذلك، عندما أحاول إدراج مستخدم بمنطقة NULL في تطبيق PHP الخاص بي، أحصل على الخطأ التالي:

 ERROR: Cannot add or update a child row: a foreign key constraint fails (`reslife4/users`, CONSTRAINT `users_ibfk_4` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON DELETE CASCADE ON UPDATE CASCADE)

ولكن، إذا أردت إضافة هذا المستخدم خارج تطبيق PHP الخاص بي، على سبيل المثال في phpMyAdmin، فسيسمح لي بذلك.

لا أحد يعرف ما يجري؟

هل كانت مفيدة؟

المحلول

يضع تطبيقك غيرNULL قيمة في region.

تمكين سجل الاستعلام وانظر ما هو بالضبط الخاص بك PHP يحاول إدراجه في الجدول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top