البرمجة

تحديث بيانات MySQLi بفعالية باستخدام ON DUPLICATE KEY UPDATE في PHP

مرحبًا هناك في عالم الويب الخارجي؛

في سبيل تسهيل حياتي قليلاً، قررت إنشاء وظيفة لتحديث جداولي بالبيانات. أود أن يتم ذلك على سبيل المثال كما يلي:

php
$table = "ticket_stati"; $fields = array('ticket_stati_id', 'locked_record', 'ticket_stati_name', 'ticket_stati_description', 'ticket_stati_color'); $data = array(1, 1, 'Open', 'The ticket is marked as open and not assigned or acked.', '#130a5a'); // استدعاء الوظيفة func_update_table($table, $fields, $data); $data = array(2, 1, 'Assigned', 'The ticket has been assigned to a user or group', '#11a916'); func_update_table($table, $fields, $data);

ولكنني أواجه صعوبة في فهم كيفية إنشاء INSERT INTO للتأكيد على أنه في حالة التكرار (ON DUPLICATE)، يتم تحديث فقط الحقول ذات البيانات التي يمكن تحديثها. هل هناك أحد يستطيع مساعدتي؟

فيما يلي الجواب:

لحل هذه المشكلة، يمكنك استخدام INSERT INTO ... ON DUPLICATE KEY UPDATE. يتيح لك هذا الاستعلام تحديث السجل إذا وجد تكرار في المفتاح الرئيسي. في هذا السياق، يمكنك استخدام ON DUPLICATE KEY UPDATE لتحديث الحقول التي تحتاج إلى التحديث فقط.

في سياق الكود الخاص بك، يمكنك تكوين الاستعلام كما يلي:

php
function func_update_table($table, $fields, $data) { $fields_str = implode(', ', $fields); $data_str = implode(', ', array_map(function ($value) { return "'" . $value . "'"; }, $data)); $update_str = ''; foreach ($fields as $field) { $update_str .= $field . " = VALUES(" . $field . "), "; } $update_str = rtrim($update_str, ', '); $query = "INSERT INTO $table ($fields_str) VALUES ($data_str) ON DUPLICATE KEY UPDATE $update_str"; // قم بتنفيذ الاستعلام هنا // mysqli_query($connection, $query); }

يستخدم هذا الاستعلام ON DUPLICATE KEY UPDATE لتحديث الحقول المحددة في حالة حدوث تكرار في المفتاح الرئيسي.

المزيد من المعلومات

بالطبع، دعوني أوسع المعلومات بخصوص كيفية استخدام ON DUPLICATE KEY UPDATE في سياق استعلام INSERT INTO في PHP باستخدام MySQLi.

في البداية، يتيح لنا استخدام INSERT INTO إضافة بيانات جديدة إلى الجدول. على سبيل المثال، في الشيفرة الخاصة بك:

php
$query = "INSERT INTO $table ($fields_str) VALUES ($data_str) ON DUPLICATE KEY UPDATE $update_str";

حيث:

  • $table يحمل اسم الجدول الذي نريد إدخال البيانات إليه.
  • $fields_str يحتوي على أسماء الحقول التي نريد إدخال البيانات إليها.
  • $data_str يحمل القيم المطابقة لكل حقل.
  • $update_str يحتوي على تعليمات ON DUPLICATE KEY UPDATE لتحديث الحقول في حالة حدوث تكرار.

في حالة حدوث تكرار في المفتاح الرئيسي (Primary Key)، يتم تنفيذ تحديث للحقول المعنية وليس إدراج قيم جديدة.

من المهم التنويه أيضًا أن هذه الطريقة تفترض أن لديك مفتاح رئيسي فريد لحقول تحديثية معينة. في حال عدم وجود مفتاح رئيسي أو وجود مفتاح يسمح بالتكرار، قد لا تكون هذه الطريقة هي الأمثل. يُفضل دائمًا فحص هيكل الجدول والتأكد من وجود مفتاح رئيسي فريد لضمان نجاح العملية.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!