• 0

كيف أتجاوز متغير ذو قيمة Null في جملة استعلام Mysqli ؟

هل بالإمكان تجاوز متغير في جملة استعلام على 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، كيف أفعل ذلك؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 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

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن