လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Batch Instention စစ်ဆင်ရေးများပြုလုပ်ရန် bind_inam နှင့် stmt_init ကိုသုံးပါ

Batch Instention စစ်ဆင်ရေးများပြုလုပ်ရန် bind_inam နှင့် stmt_init ကိုသုံးပါ

M66 2025-05-29

ဒေတာသွင်းစစ်ဆင်ရေးအမြောက်အများကိုပြုပြင်သည့်အခါ၎င်းသည် ထည့်သွင်းထားသော ထုတ်ပြန်ချက်များမှတစ်ဆင့် loop ကို loop အထိထိရောက်မှုနည်းသည်။ စွမ်းဆောင်ရည်တိုးတက်စေရန် MySQLI :: STMT_INIT သည် bind_param နှင့်ပေါင်းစပ်ပြီး bind_param နှင့်ပေါင်းစပ်ပြီး preprocessed ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်ရန်အတွက်အသုံးပြုနိုင်သည်။ ဤဆောင်းပါးသည်ဤစစ်ဆင်ရေးကိုဥပမာများမှတဆင့်မည်သို့ထိရောက်စွာလုပ်ဆောင်ရမည်ကိုရှင်းပြပါမည်။

1 ။ အဘယ်ကြောင့် preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြု?

ပြင်ဆင်ရန် + bind_param ကို အသုံးပြုခြင်းသည်ရိုးရာ string splicing နည်းလမ်းထက်ပိုမိုလုံခြုံသည်။ ၎င်း၏အားသာချက်များတွင်:

  • SQL Injection ကိုရှောင်ပါ။

  • ကွပ်မျက်ခြင်းထိရောက်မှုကိုတိုးတက်စေရန် SQL ၏ထပ်ခါတလဲလဲစုစည်းခြင်းကိုရှောင်ပါ။

  • ကောင်းသောဖတ်နိုင်မှုနှင့်ရှင်းလင်းသောဖွဲ့စည်းပုံ။

2 ။ MySQLI :: stmt_init နှင့် bind_in_param ကိုအသုံးပြုခြင်း၏အခြေခံဖြစ်စဉ်ကို

ကျွန်ုပ်တို့သည်ရိုးရှင်းသောအသုံးပြုသူသတင်းအချက်အလက်စားပွဲ၌ အသုံးပြုသူများကို ဥပမာတစ်ခုအဖြစ်ယူပြီး၎င်း၏ဖွဲ့စည်းပုံမှာအောက်ပါအတိုင်းဖြစ်သည် -

 CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

အသုံးပြုသူမှတ်တမ်းများစွာကိုဖြည့်ဆည်းရန်လိုသည်ဟုဆိုပါစို့။

 <?php
// ဒေတာဘေ့စ် connection configuration ကို
$mysqli = new mysqli("localhost", "db_user", "db_pass", "db_name");

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

// ကြေညာချက်အရာဝတ်ထုကိုအစပျိုး
$stmt = $mysqli->stmt_init();

// ပြင်ဆင်ထား SQL အသေအချာပေြာဆိုချက်
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
if (!$stmt->prepare($sql)) {
    die("Preprocessing မအောင်မြင်ပါ: " . $stmt->error);
}

// parameters တွေကိုချည်ထား(variable တွေကိုကိုးကားကြောင်းသတိပြုပါ)
$stmt->bind_param("ss", $username, $email);

// ဖြည့်စွက်ခံရဖို့ဒေတာကိုတုပ
$data = [
    ["alice", "alice@m66.net"],
    ["bob", "bob@m66.net"],
    ["charlie", "charlie@m66.net"]
];

// အသုတ်သွင်းလုပ်ဆောင်ပါ
foreach ($data as $row) {
    $username = $row[0];
    $email = $row[1];
    if (!$stmt->execute()) {
        echo "မအောင်မြင်ပါ: " . $stmt->error . "<br>";
    }
}

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

3 ။ အဓိကအချက်များကိုခွဲခြမ်းစိတ်ဖြာခြင်း

1 ။ stmtt_init ပေါင်းစပ်နှင့် ပြင်ဆင်

$ MySQLI-> ပြင်ဆင်ရန် () အတိုကောက်ကိုတိုက်ရိုက်သုံးနိုင်ပေမယ့်ရှုပ်ထွေးသောသို့မဟုတ်ကြီးမားသောစီမံကိန်းများအတွက်ပိုမိုသင့်တော်သောဖြစ်စဉ်ကိုအတိအလင်းဖော်ပြရန် stmt_init ကို သုံးပါ။

2 ။ parameter သည် binding ကိုကွင်းပြင်ပြင်ပတွင်ပြီးစီးရမည်

Bind_param သည် variable ကိုရည်ညွှန်းသည်။ ထို့ကြောင့် variable ၏တန်ဖိုးကိုကွင်းဆက်တွင်ပြောင်းလဲနိုင်သည်။

3 ။ အမှားကိုင်တွယ်

Execute တစ်ခုချင်းစီပြီးနောက်ပြန်ပို့ခြင်းကိုစစ်ဆေးခြင်း () သည် ထည့်သွင်းရန်ပျက်ကွက်ခြင်းမအောင်မြင်ပါ။

4 ။ စွမ်းဆောင်ရည်အကောင်းဆုံးအကြံပြုချက်များ

  • Batch တင်ပြချက် - ဒေတာထည့်သွင်းမှုအမြောက်အများအတွက်၎င်းကိုအသုတ် (ပစ္စည်းများ 1000 တွင်အုပ်စုတစ်စုကဲ့သို့) အသုတ်များတွင်ပြုလုပ်နိုင်သည်။

  • အလိုအလျောက်ကျူးလွန်သော ( $ MySQLI-> Autocommit (fallocommit) ) ကိုပိတ်ပါ။

  • Multi-valued Instrustial syntax (သို့) (... ), (... ), (... ), (... ),

V. နိဂုံးချုပ်

MySQLI :: stmt_init နှင့် bind_param () bind_param ကို အသုံးပြုခြင်းသည်အသုတ်သွင်း၏ထိရောက်မှုကိုတိုးတက်စေရုံသာမကလျှောက်လွှာ၏လုံခြုံရေးနှင့်ထိန်းသိမ်းမှုကိုလည်းမြှင့်တင်ပေးနိုင်သည်။ အသုံးပြုသူအချက်အလက်များသို့မဟုတ်သစ်ထုတ်လုပ်ခြင်းကဲ့သို့သောအခြေအနေများနှင့်ဆက်ဆံရာတွင်ဤနည်းလမ်းကိုအထူးအကြံပြုလိုသည်။