ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များသည် PHP တွင် MySQLI extensions ကိုအသုံးပြုသောအခါအချက်အလက်များလုံခြုံရေးကိုသေချာစေရန်နှင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်အတွက်အရေးကြီးသောနည်းလမ်းတစ်ခုဖြစ်သည်။ ဤဆောင်းပါးသည် MySQLI :: stmt_init function ကိုမှန်ကန်သောအသုံးပြုမှုနှင့် ပြင်ဆင်ခြင်း () method method ကိုအသေးစိတ်ဖော်ပြပါမည်။
MySQLI :: stmt_init ဆိုသည်မှာ MySQLI_STMT (ဖော်ပြချက်) အရာဝတ်ထုကိုအစဖွင့်ရန် MySQLI မှပေးသောနည်းလမ်းဖြစ်သည်။ ထို့နောက်ဤအရာဝတ်ထုကို SQL ထုတ်ပြန်ချက်များကိုကြိုတင်ထုတ်ပြန်ရန်အသုံးပြုနိုင်သည်။
Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
mysqli_stmt mysqli::stmt_init ( void )
၎င်းကိုများသောအားဖြင့် SQL ထုတ်ပြန်ချက်များကိုပြင်ဆင်ရန် ပြင်ဆင်ခြင်း () နည်းလမ်းဖြင့်အသုံးပြုသည်။
ကြိုတင်ပြင်ဆင်မှု () နည်းလမ်းကို SQL ကြေငြာချက်ကိုပြင်ဆင်ရန်အသုံးပြုသည်။ ၎င်းသည် SQL ဆေးထိုးတိုက်ခိုက်မှုများကိုထိရောက်စွာတားဆီးနိုင်သည်။
Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
bool mysqli_stmt::prepare ( string $query )
MySQLI :: stmt_init ကို အသုံးပြု . စံသတ်မှတ်ချက်ကိုဤတွင်ဖော်ပြထားသည်။
ဒေတာဘေ့စ်ကိုဆက်သွယ်ပါ
preprocessing ကြေညာချက်အရာဝတ်ထုကိုအစပျိုး
ပြင်ဆင်ခြင်းကိုအသုံးပြုပြီးပြင်ဆင်ခြင်း ()
bind parameters တွေကို (ဆိုပါက)
Execution ကြေငြာချက်
ရလဒ်ကိုရယူပါ (အကယ်. ၎င်းသည်စုံစမ်းမှုဖော်ပြချက်ဖြစ်ပါက)
အနီးကပ်ထုတ်ပြန်ချက်များနှင့်ဆက်သွယ်မှု
ကျွန်ုပ်တို့ တွင် Fields: ID , Username , အီးမေးလ် ။ အသုံးပြုသူအမည်အပေါ် အခြေခံ. သုံးစွဲသူ၏အီးမေးလ်လိပ်စာကိုကျွန်ုပ်တို့မေးမြန်းလိုပါသည်။
<?php
// ပထမခြေလှမ်း:ဒေတာဘေ့စ် connection တစ်ခုတည်ဆောက်ပါ
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
// ဆက်သွယ်မှုအောင်မြင်မှုရှိမရှိစစ်ဆေးပါ
if ($mysqli->connect_error) {
die("ဆက်သွယ်မှုမအောင်မြင်ပါ: " . $mysqli->connect_error);
}
// အဆင့် 2:preprocessing ကြေညာချက်အရာဝတ်ထုကိုအစပျိုး
$stmt = $mysqli->stmt_init();
// အဆင့် 3:ပြင်ဆင်ထား SQL အသေအချာပေြာဆိုချက်
$sql = "SELECT email FROM users WHERE username = ?";
if (!$stmt->prepare($sql)) {
die("SQL Preprocessing မအောင်မြင်ပါ: " . $stmt->error);
}
// အဆင့် 4:parameters တွေကိုချည်ထား
$username = "testuser";
$stmt->bind_param("s", $username); // "s" string ကိုအမျိုးအစားကိုကိုယ်စားပြုတယ်
// အဆင့် 5:执行အသေအချာပေြာဆိုချက်
$stmt->execute();
// အဆင့် 6:ရလဒ်များကိုချည်နှောင်ခြင်းနှင့်ဒေတာကိုရယူပါ
$stmt->bind_result($email);
if ($stmt->fetch()) {
echo "အသုံးပြုသူအီးမေးလ်သည်: " . $email;
} else {
echo "ဒီအသုံးပြုသူကိုရှာမတွေ့ပါ。";
}
// အဆင့် 7:关闭အသေအချာပေြာဆိုချက်与连接
$stmt->close();
$mysqli->close();
?>
SQL ကို Query () method ကို သုံး. တိုက်ရိုက်ကွပ်မျက်ခံရနိုင်သော်လည်း SQL Injection Attacks သို့ဤအရာသည်အားနည်းချက်ရှိသည်။ စည်းနှောင်ထားသော ပြင်ဆင်ခြင်း () နှင့် parameter သည်ဤပြ problem နာကိုထိရောက်စွာကာကွယ်နိုင်သည်။
stmt_init () အချည်းနှီးသောဖော်ပြချက်အရာဝတ်ထုကိုဖန်တီးပြီး ပြင်ဆင် () SQL template ကိုဖွင့်သည်။ stmt_init () ကို skip လုပ်ပြီး $ MySQLI-> ပြင်ဆင်ခြင်း () ကို အဆင့်တစ်ဆင့်အပြီးသတ်နှင့်ပြင်ဆင်မှုကိုဖြည့်စွက်ရန်တိုက်ရိုက်ခေါ်ဆိုနိုင်သည်။
ဟုတ်ပါတယ်, SQL template ဖွဲ့စည်းပုံတညီတညွတ်တည်းဖြစ်သရွေ့, ဖော်ပြချက်အရာဝတ်ထုကိုပြန်လည်အသုံးပြုပြီး parameters တွေကိုပြောင်းလဲနိုင်ပါတယ်။
အောက်ပါဥပမာသည်အချက်အလက်များကိုပုံစံဖြင့် တင်ပြ. ဒေတာဘေ့စ်သို့လုံခြုံစွာထည့်သွင်းရမည်ကိုပြသသည်။
<?php
$mysqli = new mysqli("localhost", "db_user", "db_password", "db_name");
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"] ?? "";
$email = $_POST["email"] ?? "";
$stmt = $mysqli->stmt_init();
if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
echo "အသုံးပြုသူမှတ်ပုံတင်ခြင်းအောင်မြင်စွာ!";
} else {
echo "Execution မအောင်မြင်ပါ:" . $stmt->error;
}
$stmt->close();
}
}
$mysqli->close();
?>
<form method="POST" action="https://m66.net/register.php">
အသုံးပြုသူ:<input type="text" name="username" required><br>
စာပို့:<input type="email" name="email" required><br>
<input type="submit" value="စာရင်း">
</form>
MySQLI :: stmt_init နှင့် ပြင်ဆင်ခြင်း () ပြင်ဆင်ခြင်း () PHP အတွက်အစွမ်းထက်သောဒေတာဘေ့စ်လုံခြုံရေးယန္တရားကိုထောက်ပံ့ပေးသည်။ Parameter သည် SQL Injection ကိုကာကွယ်ရုံသာမက Execution ထိရောက်မှုကိုတိုးတက်စေသည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဒေတာဘေ့စ်ကိုလည်ပတ်ရန်ကြိုတင်သတ်မှတ်ထားသောထုတ်ပြန်ချက်များကိုအမြဲတမ်းအသုံးပြုရန်အကြံပြုသည်။
MySQLI တွင် Bind_param () နှင့် bind_result () နှင့် bind_result () ၏အဆင့်မြင့်သုံးစွဲမှုအကြောင်းပိုမိုလေ့လာလိုပါသလား။