عندما تتلقى رسالة خطأ مثل “Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails”، فهذا يعني أن قيد المفتاح الخارجي (Foreign Key Constraint) قد فشل في الامتثال. في هذه الحالة، الجدول الذي تحاول إدخال بيانات إليه (events) يحتوي على مفتاح خارجي (event_cat) يشير إلى جدول آخر (categories)، والقيمة التي تحاول إدخالها في event_cat ليست موجودة في جدول categories.
يبدو أنك تستخدم استعلامات فرعية للعثور على cat_id و tournament_id من اسماء الفئة والبطولة على التوالي. إذا كان الهدف هو استخدام القيم المسترجعة من هذه الاستعلامات الفرعية كقيم لمفاتيح الفئة والبطولة في جدول الأحداث، يجب عليك ضمن هذه الاستعلامات الفرعية عبارة WHERE لتحديد الصفوف بناءً على الاسم واسترداد القيمة المطابقة فقط، مثل:
sql$subsquery1 = "SELECT cat_id FROM categories WHERE cat_name = :event_cat_name";
$subsquery2 = "SELECT tournament_id FROM tournaments WHERE tournament_name = :event_tournament_name";
ثم، يجب عليك تمرير القيم المطلوبة إلى execute مع استعلام الإدراج الأساسي، مثل:
sql$resultx = $statementx->execute(array(':event_team1' => $event_team1, ':event_team2' => $event_team2, ':event_cat_name'=> $event_cat, ':event_tournament_name'=> $event_tournament, ':event_start_at' => $event_start_at, ':event_end_to' => $event_end_to,':event_by'=>$event_by));
تأكد أيضًا من أن الأسماء التي تم تمريرها إلى execute
هي الأسماء الصحيحة للقيم التي تبحث عنها في الجدول، وأن الجداول تحتوي على البيانات المناسبة.
المزيد من المعلومات
من الواضح أن الخطأ يحدث بسبب عدم وجود قيمة صحيحة لـ event_cat
أو event_tournament
في جدولي categories
و tournaments
على التوالي. لحل هذه المشكلة، يجب التأكد من أن القيم التي تم إرجاعها من الاستعلامات الفرعية ($subsquery1
و $subsquery2
) تمثل مفاتيح صحيحة في الجداول المقابلة. لذلك، يمكنك متابعة الخطوات التالية:
-
التحقق من البيانات: تأكد من أن الأسماء التي تم تمريرها إلى الاستعلامات الفرعية (
$event_cat
و$event_tournament
) تمثل القيم الصحيحة لـcat_name
وtournament_name
في جداولcategories
وtournaments
على التوالي. -
استخدام القيم الصحيحة في الاستعلامات الرئيسية: تأكد من أنك تستخدم القيم الصحيحة المسترجعة من الاستعلامات الفرعية (
$subsquery1
و$subsquery2
) كقيم لـevent_cat
وevent_tournament
في الاستعلام الرئيسي. -
استخدام البيانات المقترنة: تأكد من أن البيانات في جدولي
categories
وtournaments
تحتوي على القيم المقترنة بشكل صحيح. على سبيل المثال، إذا كان لديك قيمةcat_id
معينة في جدولcategories
، يجب أن تكون لديك قيمةcat_name
مقابلها. -
استخدام روابط البيانات الصحيحة: تأكد من أن القيم التي تم إدخالها في جدول الأحداث (
events
) كقيم لـevent_cat
وevent_tournament
تمثل مفاتيح صحيحة في جداولهما المقابلة.
من المهم أيضًا التأكد من أن الجداول تحتوي على البيانات الصحيحة وأنها محدثة بشكل صحيح. قد تحتاج أيضًا إلى إعادة ترتيب استعلاماتك لتأكيد أن القيم الصحيحة تم تمريرها بشكل صحيح إلى execute
.