تحديث بيانات MySQLi بفعالية باستخدام ON DUPLICATE KEY UPDATE في PHP
مرحبًا هناك في عالم الويب الخارجي؛
في سبيل تسهيل حياتي قليلاً، قررت إنشاء وظيفة لتحديث جداولي بالبيانات. أود أن يتم ذلك على سبيل المثال كما يلي:
-
توحيد سلسلة اتصال قاعدة بيانات MDF02/03/2024
-
بناء نموذج TensorFlow متعدد المداخل14/04/2024
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
لتحديث الحقول التي تحتاج إلى التحديث فقط.
في سياق الكود الخاص بك، يمكنك تكوين الاستعلام كما يلي:
phpfunction 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)، يتم تنفيذ تحديث للحقول المعنية وليس إدراج قيم جديدة.
من المهم التنويه أيضًا أن هذه الطريقة تفترض أن لديك مفتاح رئيسي فريد لحقول تحديثية معينة. في حال عدم وجود مفتاح رئيسي أو وجود مفتاح يسمح بالتكرار، قد لا تكون هذه الطريقة هي الأمثل. يُفضل دائمًا فحص هيكل الجدول والتأكد من وجود مفتاح رئيسي فريد لضمان نجاح العملية.