လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_STMT :: batch update ကိုအောင်မြင်ရန်ပြင်ဆင်ပါ

MySQLI_STMT :: batch update ကိုအောင်မြင်ရန်ပြင်ဆင်ပါ

gitbox 2025-05-28

ဒေတာဘေ့စ်လုပ်ငန်းလည်ပတ်မှုအတွက် PHP ကိုအသုံးပြုသောအခါအသုတ်မွမ်းမံမှုများသည်ဘုံလိုအပ်ချက်ဖြစ်သည်။ သီးခြားအပ်ဒိတ်ထုတ်ပြန်ချက်များစွာကိုတိုက်ရိုက်ကွပ်မျက်ခြင်းသည်မတတ်နိုင်သောကြောင့်, MySQLI_STMT :: ပြင်ဆင်ခြင်း နည်းလမ်းကိုအသုံးပြုခြင်း, ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့် parameter များသည်အသုတ်မွမ်းမံမှုများ၏စွမ်းဆောင်ရည်နှင့်လုံခြုံရေးကိုသိသိသာသာတိုးတက်စေနိုင်သည်။

ဤဆောင်းပါးသည် MySQLI_STMT ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြရန်ပြင်ဆင်ပါလိမ့်မည်။


1 ။ MySQLI_STMTMT :: Batch update ကိုအောင်မြင်ရန်အဘယ်ကြောင့်ရွေးချယ်ပါ။

  1. Preprocessing ထုတ်ပြန်ချက်များအလွန်အမင်းလုံခြုံစိတ်ချစွာဖြစ်ကြသည် Preprocessing ထုတ်ပြန်ချက်များသည် SQL Injection ၏အန္တရာယ်ကိုရှောင်ရှားနိုင်သည်။

  2. တိုးတက်လာသော Execution ထိရောက်မှု တူညီသောကြိုတင်သတ်မှတ်ထားသည့်ကြေညာချက်ကိုတစ်ကြိမ်သာခွဲရန်လိုသည်, အကြိမ်ပေါင်းများစွာကွပ်မျက်ရန်လိုအပ်သည်။ parameter များကိုသာအစားထိုးခြင်း,

  3. CONCE COCTION COCTION COCTION နှင့်ထိန်းသိမ်းရန်လွယ်ကူသည် ရှင်းလင်းသောဖွဲ့စည်းပုံ, အသုတ်စစ်ဆင်ရေးအတွက်ယုတ္တိဗေဒထုပ်ပိုးခြင်းနှင့်မြှောက်ခြင်းများအတွက်သင့်တော်သည်


2 ။ အသုတ်မွမ်းမံမှုများအတွက်အခြေခံအတွေးအခေါ်များ

အသုံးပြုသူ ID ကို အခြေခံ. ၎င်းတို့၏ status ကို မွမ်းမံရန်လိုအပ်သည့် အသုံးပြုသူ ဇယားရှိသည်ဆိုပါစို့။ ရိုးရာအလေ့အကျင့်မှာ -

 UPDATE users SET status = 'active' WHERE id = 1;
UPDATE users SET status = 'inactive' WHERE id = 2;
...

သို့သော် SQL ထုတ်ပြန်ချက်များစွာအကောင်အထည်ဖော်ရန် overhead သည်မြင့်မားပြီးတိုးတက်မှုဖြေရှင်းချက်မှာ -

  1. Precompiled update ကိုကြေညာချက်တင်းပလိတ်များ။

  2. ကွဲပြားခြားနားသော parameters တွေကိုကွပ်မျက်ရန်အလှည့်အတွက်ချည်နှောင်။


3 ။ နမူနာကုဒ်ခွဲခြမ်းစိတ်ဖြာ

MySQLI_STMMT ကို အသုံးပြု. အစုအသစ်များ ::

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

// ဆက်သွယ်မှုကိုစစ်ဆေးပါ
if ($mysqli->connect_error) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}

// ကြိုတင် SQL,placeholders ထားပါ
$sql = "UPDATE users SET status = ? WHERE id = ?";
$stmt = $mysqli->prepare($sql);

if (!$stmt) {
    die("ကြိုတင်失败: " . $mysqli->error);
}

// အသုတ် update ဒေတာကိုတုပ
$updateData = [
    ['status' => 'active', 'id' => 1],
    ['status' => 'inactive', 'id' => 2],
    ['status' => 'pending', 'id' => 3],
];

// parameters တွေကိုချည်ထား
foreach ($updateData as $data) {
    // 'si' ပထမ ဦး ဆုံး parameter သည် string ကိုဖြစ်ပါတယ်ကြောင်းဖော်ပြသည်,ဒုတိယ parameter သည်ကိန်းတစ်ခုဖြစ်သည်
    $stmt->bind_param('si', $data['status'], $data['id']);
    $stmt->execute();
    
    if ($stmt->error) {
        echo "Execution မအောင်မြင်ပါ: " . $stmt->error . "\n";
    }
}

$stmt->close();
$mysqli->close();
?>

4 ။ ထိရောက်သောတိုးတက်မှုစွမ်းရည်

  1. ငွေပေးငွေယူအပြောင်းအလဲနဲ့ ငွေပေးငွေယူကတိကဝတ်များကိုလျှော့ချရန်ငွေပေးချေမှုကိုငွေပေးချေမှုသို့မွမ်းမံသောထုတ်ပြန်ချက်များကိုထည့်သွင်းပါ

 $mysqli->begin_transaction();

foreach ($updateData as $data) {
    $stmt->bind_param('si', $data['status'], $data['id']);
    $stmt->execute();
}

$mysqli->commit();
  1. Batch Update ကိုပေါင်းစည်း <br> <br> အကယ်. update fields များသည်အတူတူပင်ဖြစ်ပါက data volume သည်ကြီးမားပါက, မှတ်တမ်းမျိုးစုံကိုတစ်ပြိုင်တည်း update လုပ်ရန်ကြေငြာချက်ကိုဖော်ပြသည့်အခါအမှုအားသင်အသုံးပြုနိုင်သည်။

 $ids = array_column($updateData, 'id');
$ids_list = implode(',', $ids);

$sql = "UPDATE users SET status = CASE id ";
foreach ($updateData as $data) {
    $status = $mysqli->real_escape_string($data['status']);
    $sql .= "WHEN {$data['id']} THEN '{$status}' ";
}
$sql .= "END WHERE id IN ($ids_list)";

$mysqli->query($sql);

ဤနည်းလမ်းသည်ကြီးမားသောအသုတ်မွမ်းမံမှုများအတွက်သင့်တော်သော်လည်းကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များ၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်လုံခြုံရေးကိုရှုံးသည်။

  1. လုံလောက်သောဆက်သွယ်မှုနှင့်အရင်းအမြစ်များအတွက်ပြင်ဆင်ပါ သယံဇာတပိတ်ဆို့မှုများကြောင့်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းကိုရှောင်ရှားရန်ဒေတာဘေ့စ်ဆက်သွယ်မှုကိုစနစ်တကျပြုပြင်ထားကြောင်းသေချာစေပါ


5 ။ အကျဉ်းချုပ်

MySQLI_STMT :: Batch အသစ်ပြောင်းခြင်းများရရှိရန်ပြင်ဆင်ထားသည့် အဆင့်မြှင့်တင်မှုများသည်စစ်ဆင်ရေး၏လုံခြုံရေးကိုသေချာစေရုံသာမက Execution ထိရောက်မှုကိုတိုးတက်စေသည်။ ငွေပေးငွေယူစီမံခန့်ခွဲမှုနှင့်ကျိုးကြောင်းဆီလျော်သော SQL ဆောက်လုပ်ရေးနည်းလမ်းများကိုပေါင်းစပ်ခြင်း, စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်ပြီး PHP + MySQL application အခြေအနေများအတွက်သင့်တော်သည်။

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