اذهب إلى المحتوى

السؤال

نشر

هل بالإمكان تجاوز متغير في جملة استعلام على Mysqli؟ أي هل من الممكن في حالة كان متغير ما يحتوي على القيمة Null اعتباره غير موجود وبالتالي يتم تجاوزه في جملة الاستعلام؟

كمثال:

$stmt = $mysqli->prepare("UPDATE personal SET name=?, gender=?, telp=?, address=?, date_deadline=? WHERE id_personal=?");
  $stmt->bind_param('ssssss', $nm, $gd, $tl, $ar, $dt, $id);

في هذه الحالة أريد تجاوز المتغير date_deadline  في حالة كان Null، كيف أفعل ذلك؟

Recommended Posts

  • 0
نشر

نعم، يمكن فعل ذلك، وذلك باستعمال الدالة case when والتي من شأنها التأكد من شرط معيّن، أو المرور على عدة شروط مرفقة بكود برمجي يفعّل إذا تحقق الشرط، وللتوضيح، أرفق هذا المثال للاستئناس به:

CREATE FUNCTION myFunction(delivery_day INT(1),preferred INT(1))
  RETURNS INT(2)
 BEGIN

 DECLARE shipping_cost INT(2) DEFAULT 0;

 CASE
 WHEN preferred = 1 THEN
         SET shipping_cost = 2;
 WHEN delivery_day = 1 THEN
        SET shipping_cost = 20;
 WHEN delivery_day = 2 THEN
        SET shipping_cost = 15;
 WHEN delivery_day = 3 THEN
         SET shipping_cost = 10;
 ELSE
         SET shipping_cost = 5;
 END CASE;
 RETURN shipping_cost;
 END

حيث سيأخذ المتغير shipping_cost قيمة حسب الشرط case when.

أما في حالة جملة الاستعلام الخاصة بك، ستكون على الشكل التالي:

UPDATE personal 
SET name=?, gender=?, telp=?, address=?,
    date_deadline = case when ? is null 
                         then date_deadline
                         else ? 
                    end
WHERE id_personal = ?

$stmt->bind_param('sssssss', $nm, $gd, $tl, $ar, $dt, $dt, $id);

لاحظ :

    date_deadline = case when ? is null 

أي التحقق من أن المتغير date_deadline يحمل القيمة null، عندها سيتم تجاوز تغيير قيمته أثناء Update، ولن يتم تغييره.

CASE When Syntax

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...