PHP တွင် MySQLI extension သည် MySQL database များနှင့်အပြန်အလှန်ဆက်သွယ်နိုင်သည့်စွမ်းရည်များဖြစ်သည်။ stmt_init နှင့် bind_param သည် ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့် parameter စည်းမျဉ်းစည်းကမ်းများအတွက်အသုံးများသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်အထူးသဖြင့် binding parametery အမျိုးအစားများကိုအသုံးပြုသောအခါဤလုပ်ငန်းဆောင်တာများကိုအသုံးပြုသောအခါများသောအားဖြင့်အမှားများကိုဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုများကိုမှန်ကန်စွာအသုံးပြုရမည်, အထူးသဖြင့်အမှားအယွင်းများကိုရှောင်ရှားရန်အမျိုးအစားကြိုးများမှန်ကန်စွာအသုံးပြုမှုကိုသေချာစွာအသုံးပြုနိုင်သည်။
MySQLI :: stmt_init နည်းလမ်းကို preprocessing statement ကိုစတင်ရန်အသုံးပြုသည်။ ၎င်းသည် MySQLI_STMT အရာဝတ်ထုကိုပြန်လည်ဖြေကြားနိုင်ပြီး binding parameters တွေကိုကွပ်မျက်ခံရနိုင်သည့် MySQLI_STMT အရာဝတ်ထုကိုပြန်ပေးရန်အသုံးပြုသည်။ bind_param နည်းလမ်းကို plprocessing statements (များသောအားဖြင့် ) placeholders မှ placeholders မှ variable တွေကို carable လုပ်ထားရန်အသုံးပြုသည်။ စည်းမျဉ်းစည်းကမ်းများအရအချက်အလက်များအတွက်ဒေတာအမျိုးအစားကိုသတ်မှတ်ရန်လိုအပ်သည်။
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("INSERT INTO users (name, age) VALUES (?, ?)")) {
$name = "John Doe";
$age = 25;
// parameters တွေကိုချည်ထား
$stmt->bind_param("si", $name, $age); // 's' တစ် string ကိုကိုယ်စားပြုတယ်,'i' ကိန်းဂဏန်းများကိုဖော်ပြသည်
// Execution ကြေငြာချက်
$stmt->execute();
echo "Record inserted successfully!";
} else {
echo "Error: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
ဤဥပမာတွင် Bind_param ကို SQL query တွင်ဒေါ်လာ rolushere သို့ ဒေါ်လာ နှင့် $ age variable များကိုချည်နှောင်ရန်အသုံးပြုသည်။ Type string "si" ဆိုသည်မှာ $ name သည် string ( s ) နှင့် $ အသက်အရွယ် သည်ကိန်း ( 1 ) ဖြစ်သည်။
Bind_param ၏ပထမဆုံး pareter သည် parameter တစ်ခုစီ၏အမျိုးအစားကိုသတ်မှတ်သည့် string တစ်ခုဖြစ်သည်။ ဘုံအမျိုးအစားများမှာ -
i : ကိန်း
D : နှစ်ထပ် pletoating point နံပါတ် (နှစ်ဆ)
S : String (string)
B : Binary Data (BLOB)
parameter တစ်ခုစီအတွက်မှန်ကန်သောအမျိုးအစားကိုသတ်မှတ်ရန်သေချာစေရန်အရေးကြီးသည်မှာမှားယွင်းသောအမျိုးအစားများသည်ဒေတာဗေ့စ်သို့မှားယွင်းစွာဖြည့်စွက်ရန်အချက်အလက်များမရှိမဖြစ်လိုအပ်သောအချက်အလက်များသို့မဟုတ်ဒေတာများကိုမှားယွင်းစွာဖြည့်ဆည်းပေးနိုင်သည်ကိုသေချာစေရန်အရေးကြီးသည်။
$stmt->bind_param("si", $age, $name); // အမှား,အမိန့်ကမှားတယ်
ဤဥပမာတွင်စည်းမျဉ်းစည်းကမ်းသည်မှားယွင်းနေသည်, ဒေါ်လာ age သည် Ige အမျိုးအစားဖြင့်အသုံးပြုသင့်သောကိန်းဂဏန်း ဖြစ်သည် ။
MySQL အမျိုးအစား - MySQL သည် string type variable ကို placeholder တစ်ခုသို့ 0 င်ရောက်ရန်ကြိုးစားပါက MySQL သည်အမှားတစ်ခုသို့ပြန်ပို့ပါက, parameter တစ်ခုစီအတွက်ဒေတာအမျိုးအစားကိုသင်နားလည်ပြီး bind_param တွင်မှန်ကန်သောအမျိုးအစား string ကိုသုံးပါ။
bind_param ကို မသုံးမီ variable တွေကိုအစပြုပါ။ crol_param ကို မသုံးမီ variable တွေကိုချည်နှောင်ရန်သင် variable အားလုံးကို convalized သေချာအောင်လုပ်ပါ။ ထုတ်ယူထားသော variable များသည် PHP ကိုအမှားတစ်ခုသတင်းပို့လိမ့်မည်။
SQL Injection ကိုကာကွယ်ခြင်း - Preprocessed ထုတ်ပြန်ချက်များနှင့် parameter bindings များကိုအသုံးပြုခြင်းသည် SQL ဆေးထိုးခြင်းကိုတားဆီးရုံသာမကဒေတာအမျိုးအစားများမှန်ကန်မှုကိုသေချာစေသည်။ ဤနည်းအားဖြင့် MySQL သည်အသုံးပြုသူမှထည့်သွင်းထားသောအချက်အလက်များသည်မျှော်လင့်ထားသည့်အမျိုးအစားနှင့်မကိုက်ညီပါကပင်မှန်ကန်စွာကိုင်တွယ်နိုင်သည်။
အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် URLs နှင့်အခြားအချက်အလက်များကို SQL Query များအဖြစ် parameters များကို pass များအတိုင်းဖြတ်သန်းလေ့ရှိသည်။ ဒေတာရှေ့နောက်ညီညွတ်မှုရှိစေရန် URLs များအားလုံးကို M66.net နှင့်အစားထိုးသည့် URL များကိုပြုပြင်ခြင်းဥပမာတစ်ခုဖြစ်သည်။