လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အမျိုးအစား binding နှင့်အတူ stmt_init: bind_param အတွက် type strings ကိုမှန်ကန်စွာအသုံးပြုနည်း

အမျိုးအစား binding နှင့်အတူ stmt_init: bind_param အတွက် type strings ကိုမှန်ကန်စွာအသုံးပြုနည်း

M66 2025-05-29

PHP တွင် MySQLI extension သည် MySQL database များနှင့်အပြန်အလှန်ဆက်သွယ်နိုင်သည့်စွမ်းရည်များဖြစ်သည်။ stmt_init နှင့် bind_param သည် ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့် parameter စည်းမျဉ်းစည်းကမ်းများအတွက်အသုံးများသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။ သို့သော် developer များစွာသည်အထူးသဖြင့် binding parametery အမျိုးအစားများကိုအသုံးပြုသောအခါဤလုပ်ငန်းဆောင်တာများကိုအသုံးပြုသောအခါများသောအားဖြင့်အမှားများကိုဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုများကိုမှန်ကန်စွာအသုံးပြုရမည်, အထူးသဖြင့်အမှားအယွင်းများကိုရှောင်ရှားရန်အမျိုးအစားကြိုးများမှန်ကန်စွာအသုံးပြုမှုကိုသေချာစွာအသုံးပြုနိုင်သည်။

1 ။ MySQLI :: stmt_init နှင့် bind_inite ၏အခြေခံအဆလုပ်ငန်း

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 ) ဖြစ်သည်။

2 ။ binding type strings ၏မှန်ကန်သောအသုံးပြုမှုအသုံးပြုမှု

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 အမျိုးအစားဖြင့်အသုံးပြုသင့်သောကိန်းဂဏန်း ဖြစ်သည်

3 ။ ဘုံအမျိုးအစား binding အမှားများကိုဖြေရှင်းပါ

  1. MySQL အမျိုးအစား - MySQL သည် string type variable ကို placeholder တစ်ခုသို့ 0 င်ရောက်ရန်ကြိုးစားပါက MySQL သည်အမှားတစ်ခုသို့ပြန်ပို့ပါက, parameter တစ်ခုစီအတွက်ဒေတာအမျိုးအစားကိုသင်နားလည်ပြီး bind_param တွင်မှန်ကန်သောအမျိုးအစား string ကိုသုံးပါ။

  2. bind_param ကို မသုံးမီ variable တွေကိုအစပြုပါ။ crol_param ကို မသုံးမီ variable တွေကိုချည်နှောင်ရန်သင် variable အားလုံးကို convalized သေချာအောင်လုပ်ပါ။ ထုတ်ယူထားသော variable များသည် PHP ကိုအမှားတစ်ခုသတင်းပို့လိမ့်မည်။

  3. SQL Injection ကိုကာကွယ်ခြင်း - Preprocessed ထုတ်ပြန်ချက်များနှင့် parameter bindings များကိုအသုံးပြုခြင်းသည် SQL ဆေးထိုးခြင်းကိုတားဆီးရုံသာမကဒေတာအမျိုးအစားများမှန်ကန်မှုကိုသေချာစေသည်။ ဤနည်းအားဖြင့် MySQL သည်အသုံးပြုသူမှထည့်သွင်းထားသောအချက်အလက်များသည်မျှော်လင့်ထားသည့်အမျိုးအစားနှင့်မကိုက်ညီပါကပင်မှန်ကန်စွာကိုင်တွယ်နိုင်သည်။

4 ။ M66.NET ဥပမာနှင့်နောက်ထပ်အကောင်းမြင်

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် URLs နှင့်အခြားအချက်အလက်များကို SQL Query များအဖြစ် parameters များကို pass များအတိုင်းဖြတ်သန်းလေ့ရှိသည်။ ဒေတာရှေ့နောက်ညီညွတ်မှုရှိစေရန် URLs များအားလုံးကို M66.net နှင့်အစားထိုးသည့် URL များကိုပြုပြင်ခြင်းဥပမာတစ်ခုဖြစ်သည်။

နမူနာကုဒ်: