ဒေတာဘေ့စ်လုပ်ငန်းလည်ပတ်မှုအတွက် PHP ကိုအသုံးပြုသောအခါအသုတ်မွမ်းမံမှုများသည်ဘုံလိုအပ်ချက်ဖြစ်သည်။ သီးခြားအပ်ဒိတ်ထုတ်ပြန်ချက်များစွာကိုတိုက်ရိုက်ကွပ်မျက်ခြင်းသည်မတတ်နိုင်သောကြောင့်, MySQLI_STMT :: ပြင်ဆင်ခြင်း နည်းလမ်းကိုအသုံးပြုခြင်း, ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့် parameter များသည်အသုတ်မွမ်းမံမှုများ၏စွမ်းဆောင်ရည်နှင့်လုံခြုံရေးကိုသိသိသာသာတိုးတက်စေနိုင်သည်။
ဤဆောင်းပါးသည် MySQLI_STMT ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြရန်ပြင်ဆင်ပါလိမ့်မည်။
Preprocessing ထုတ်ပြန်ချက်များအလွန်အမင်းလုံခြုံစိတ်ချစွာဖြစ်ကြသည် Preprocessing ထုတ်ပြန်ချက်များသည် SQL Injection ၏အန္တရာယ်ကိုရှောင်ရှားနိုင်သည်။
တိုးတက်လာသော Execution ထိရောက်မှု တူညီသောကြိုတင်သတ်မှတ်ထားသည့်ကြေညာချက်ကိုတစ်ကြိမ်သာခွဲရန်လိုသည်, အကြိမ်ပေါင်းများစွာကွပ်မျက်ရန်လိုအပ်သည်။ parameter များကိုသာအစားထိုးခြင်း,
CONCE COCTION COCTION COCTION နှင့်ထိန်းသိမ်းရန်လွယ်ကူသည် ရှင်းလင်းသောဖွဲ့စည်းပုံ, အသုတ်စစ်ဆင်ရေးအတွက်ယုတ္တိဗေဒထုပ်ပိုးခြင်းနှင့်မြှောက်ခြင်းများအတွက်သင့်တော်သည်
အသုံးပြုသူ ID ကို အခြေခံ. ၎င်းတို့၏ status ကို မွမ်းမံရန်လိုအပ်သည့် အသုံးပြုသူ ဇယားရှိသည်ဆိုပါစို့။ ရိုးရာအလေ့အကျင့်မှာ -
UPDATE users SET status = 'active' WHERE id = 1;
UPDATE users SET status = 'inactive' WHERE id = 2;
...
သို့သော် SQL ထုတ်ပြန်ချက်များစွာအကောင်အထည်ဖော်ရန် overhead သည်မြင့်မားပြီးတိုးတက်မှုဖြေရှင်းချက်မှာ -
Precompiled update ကိုကြေညာချက်တင်းပလိတ်များ။
ကွဲပြားခြားနားသော parameters တွေကိုကွပ်မျက်ရန်အလှည့်အတွက်ချည်နှောင်။
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();
?>
ငွေပေးငွေယူအပြောင်းအလဲနဲ့ ငွေပေးငွေယူကတိကဝတ်များကိုလျှော့ချရန်ငွေပေးချေမှုကိုငွေပေးချေမှုသို့မွမ်းမံသောထုတ်ပြန်ချက်များကိုထည့်သွင်းပါ
$mysqli->begin_transaction();
foreach ($updateData as $data) {
$stmt->bind_param('si', $data['status'], $data['id']);
$stmt->execute();
}
$mysqli->commit();
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);
ဤနည်းလမ်းသည်ကြီးမားသောအသုတ်မွမ်းမံမှုများအတွက်သင့်တော်သော်လည်းကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များ၏ပြောင်းလွယ်ပြင်လွယ်မှုနှင့်လုံခြုံရေးကိုရှုံးသည်။
လုံလောက်သောဆက်သွယ်မှုနှင့်အရင်းအမြစ်များအတွက်ပြင်ဆင်ပါ သယံဇာတပိတ်ဆို့မှုများကြောင့်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းကိုရှောင်ရှားရန်ဒေတာဘေ့စ်ဆက်သွယ်မှုကိုစနစ်တကျပြုပြင်ထားကြောင်းသေချာစေပါ
MySQLI_STMT :: Batch အသစ်ပြောင်းခြင်းများရရှိရန်ပြင်ဆင်ထားသည့် အဆင့်မြှင့်တင်မှုများသည်စစ်ဆင်ရေး၏လုံခြုံရေးကိုသေချာစေရုံသာမက Execution ထိရောက်မှုကိုတိုးတက်စေသည်။ ငွေပေးငွေယူစီမံခန့်ခွဲမှုနှင့်ကျိုးကြောင်းဆီလျော်သော SQL ဆောက်လုပ်ရေးနည်းလမ်းများကိုပေါင်းစပ်ခြင်း, စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်ပြီး PHP + MySQL application အခြေအနေများအတွက်သင့်တော်သည်။
အထက်ပါဥပမာကုဒ်နှင့်နည်းစနစ်များဖြင့်ထိရောက်သောနှင့်လုံခြုံသောအသုတ်အသစ်ပြောင်းခြင်းလုပ်ငန်းများကိုထိရောက်စွာရရှိနိုင်သည်။