PHP တွင် SQL အသုံးပြုမှုအား အဆင့်မြှင့်တင်ခြင်း

ဒေတာဘေ့စ်သို့ SQL မေးမြန်းချက်များ လုပ်ဆောင်ခြင်းသည် အလွန်နှေးကွေးသော လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ထို့ကြောင့် ဒေတာဘေ့စ်သို့ မေးမြန်းချက်အရေအတွက်ကို လျှော့ချရန် ကြိုးစားသင့်ပါသည်။

အပြုသဘောဆောင်သော အမှားမှာ ကွင်းဆက်အတွင်းတွင် SQL မေးမြန်းချက်များစွာ လုပ်ဆောင်ခြင်းဖြစ်ပြီး၊ ဆန္ဒရှိရာကို command တစ်ခုတည်းဖြင့် လုပ်ဆောင်နိုင်သော အခြားရွေးချယ်စရာ မေးမြန်းချက်များ ရှိနေပါသည်။

ဥပမာဖြင့် ကြည့်ရအောင်။

ကျွန်ုပ်တို့တွင် ဒေတာဘေ့စ်ရှိ မှတ်တမ်း id များပါသော အခင်းအကျင်းတစ်ခု ရှိသည်ဆိုပါစို့။ ထိုကဲ့သို့သော id များဖြင့် မှတ်တမ်းများအား ဖျက်ရန်လိုအပ်သည်။

အချိန်ကြာမြင့်စွာ စဉ်းစားခြင်းမရှိဘဲ၊ အောက်ပါ "အံ့သြဖွယ်" တည်ဆောက်မှုကို ရေးနိုင်ပါသည်။

php<?php
  $ids = [1, 2, 3, 4, 5]; // ဖျက်ရန်အတွက် အခင်းအကျင်း
  
  foreach ($ids as $id) {
    mysqli_query($link, "DELETE FROM users WHERE id=$id");
  }
?>

ဤကုဒ်၏ပြဿနာမှာ ကွင်းဆက်အတွင်းတွင် မေးမြန်းချက်များစွာ လုပ်ဆောင်ခြင်းကြောင့်ဖြစ်သည်။ အခင်းအကျင်းထဲတွင် အရာဝတ္ထု 100 ခု ရှိမည်ဟု စိတ်ကူးကြည့်ပါ - ဒေတာဘေ့စ်သို့ မေးမြန်းချက် 100 ခု လုပ်ဆောင်ပါလိမ့်မည်။

ဖော်ပြပါတာဝန်၏ အထူးထောင်ချောက်မှာ ဝဘ်ဆိုက်တည်ဆောက်သည့်အခါ ဒေတာဘေ့စ်သည် သေးငယ်ပြီး မေးမြန်းချက်များသည် အလွန်လျင်မြန်စွာ လုပ်ဆောင်ခြင်းဖြစ်သည်။ �ို့သော်၊ ဆာဗာပေါ်တွင် ဝဘ်ဆိုက်လုပ်ဆောင်သည်နှင့်အမျှ ဒေတာဘေ့စ်သည် ကြီးထွားလာမည်၊ မေးမြန်းချက်များသည် ပိုမိုနှေးကွေးစွာ လုပ်ဆောင်လာမည်၊ ကွင်းဆက်အတွင်း မေးမြန်းချက်ရာပေါင်းများစွာ လုပ်ဆောင်ခြင်းကြောင့် ဝဘ်ဆိုက်သည် တစ်မိနစ်ကျော် ဝန်ခံယူနေရနိုင်သည်။

အားအနည်းငယ်သာထည့်သွင်းခြင်းဖြင့်၊ မေးမြန်းချက်တစ်ခုတည်းသာ လုပ်ဆောင်ရန် ဤကဲ့သို့လုပ်နိုင်သည်။

php<?php
  $ids = [1, 2, 3, 4, 5];
  
  $str = implode(',', $ids); // စာကြောင်း '1,2,3,4,5' ကိုရရှိမည်
  mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
Задание 1

အောက်ပါကုဒ်ကို အဆင့်မြှင့်တင်ပါ။

php<?php
  $arr = [1, 2, 2, 4, 5];
  $res = [];
  
  for ($i = 1; $i < count($arr); $i++) {
    $note = mysqli_query($link, "SELECT * FROM users WHERE id=$id");
    for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row);
    
    $res[] = $data;
  }
  
  var_dump($res);
?>