PHP MySQL ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များ
ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များသည် SQL ထိုးသွင်းမှုများနှင့် ပတ်သက်၍ အလွန်အသုံးဝင်သည်။
ပြင်ဆင်ထားသော ထုတ်ပြန်ချက်များနှင့် ဘောင်ဘောင်များ
ပြင်ဆင်ထားသောထုတ်ပြန်ချက်သည် တူညီသော (သို့မဟုတ်အလားတူ) SQL ကြေညာချက်များကို စွမ်းဆောင်ရည်မြင့်မားစွာဖြင့် ထပ်ခါတလဲလဲလုပ်ဆောင်ရန် အသုံးပြုသည့်အင်္ဂါရပ်တစ်ခုဖြစ်သည်။
ပြင်ဆင်ထားသော ထုတ်ပြန်ချက်များသည် အခြေခံအားဖြင့် ဤကဲ့သို့ လုပ်ဆောင်သည်-
- ပြင်ဆင်ခြင်း- SQL ထုတ်ပြန်ချက် နမူနာပုံစံကို ဖန်တီးပြီး ဒေတာဘေ့စ်သို့ ပေးပို့သည်။ အချို့သောတန်ဖိုးများကို ကန့်သတ်ချက်များဟု ခေါ်သည် ("?") ဟုခေါ်သည်။ ဥပမာ- MyGuests တန်ဖိုးများထဲသို့ ထည့်သွင်းပါ(?၊ ?၊ ?)
- ဒေတာဘေ့စ်သည် ခွဲခြမ်းစိပ်ဖြာခြင်း၊ စုစည်းခြင်းနှင့် SQL ထုတ်ပြန်ချက်ပုံစံ နမူနာပေါ်တွင် query optimization လုပ်ဆောင်ပြီး ၎င်းကို လုပ်ဆောင်ခြင်းမရှိဘဲ ရလဒ်ကို သိမ်းဆည်းသည်။
- Execute- နောက်ပိုင်းအချိန်တွင်၊ အပလီကေးရှင်းသည် တန်ဖိုးများကို ကန့်သတ်ဘောင်များနှင့် ချိတ်ဆက်ပြီး ဒေတာဘေ့စ်မှ ထုတ်ပြန်ချက်ကို လုပ်ဆောင်သည်။ အပလီကေးရှင်းသည် မတူညီသောတန်ဖိုးများဖြင့် အလိုရှိသည့်အတိုင်း ထုတ်ပြန်ချက်ကို အကြိမ်များစွာ လုပ်ဆောင်နိုင်သည်။
SQL ထုတ်ပြန်ချက်များအား တိုက်ရိုက်လုပ်ဆောင်ခြင်းနှင့် နှိုင်းယှဉ်ပါက ပြင်ဆင်သည့်ထုတ်ပြန်ချက်များတွင် အဓိက အားသာချက် သုံးခုရှိသည်။
- မေးမြန်းမှုအပေါ် ပြင်ဆင်မှုကို တစ်ကြိမ်သာ ပြုလုပ်သောကြောင့် ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များသည် ခွဲခြမ်းစိတ်ဖြာသည့်အချိန်ကို လျှော့ချသည် (ထုတ်ပြန်ချက်ကို အကြိမ်များစွာ လုပ်ဆောင်သော်လည်း)
- ဘောင်ခတ်ထားသော ကန့်သတ်ဘောင်များသည် မေးမြန်းမှုတစ်ခုလုံးမဟုတ်ဘဲ အကြိမ်တိုင်း ကန့်သတ်ဘောင်များကိုသာ ပေးပို့ရန်လိုအပ်သည့်အတွက် ဆာဗာသို့ လှိုင်းနှုန်းကို လျှော့ချပေးသည်။
- ကွဲပြားသော ပရိုတိုကောကို အသုံးပြု၍ နောက်ပိုင်းတွင် ပို့လွှတ်သည့် ပါရာမီတာတန်ဖိုးများသည် မှန်ကန်စွာ လွတ်မြောက်ရန် မလိုအပ်သောကြောင့် ပြင်ဆင်ထားသော ထုတ်ပြန်ချက်များသည် SQL ထိုးခြင်းများနှင့် ဆန့်ကျင်ဘက်တွင် အလွန်အသုံးဝင်ပါသည်။ မူရင်းထုတ်ပြန်ချက် နမူနာပုံစံသည် ပြင်ပထည့်သွင်းမှုမှ ဆင်းသက်လာခြင်းမဟုတ်ပါက၊ SQL ထိုးသွင်းမှု မဖြစ်ပေါ်နိုင်ပါ။
MySQLi တွင်ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များ
အောက်ဖော်ပြပါ ဥပမာသည် MySQLi တွင် ပြင်ဆင်ထားသော ထုတ်ပြန်ချက်များနှင့် ဘောင်ဘောင်ဘောင်များကို အသုံးပြုသည်-
ဥပမာ (MySQLi with Prepared Statements)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();
echo "New records created successfully";
$stmt->close();
$conn->close();
?>
အထက်ဖော်ပြပါ ဥပမာမှ ရှင်းပြရန် ကုဒ်လိုင်းများ
"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"
ကျွန်ုပ်တို့၏ SQL တွင်၊ ကျွန်ုပ်တို့သည် ကိန်းပြည့်၊ စာကြောင်း၊ နှစ်ဆ သို့မဟုတ် blob တန်ဖိုးဖြင့် အစားထိုးလိုသည့် မေးခွန်းအမှတ်အသား (?) ကို ထည့်သွင်းပါသည်။
ထို့နောက် bind_param() လုပ်ဆောင်ချက်ကို ကြည့်လိုက်ပါ။
$stmt->bind_param("sss", $firstname, $lastname, $email);
ဤလုပ်ဆောင်ချက်သည် ပါရာမီတာများကို SQL query နှင့် ချိတ်ဆက်ပြီး ဒေတာဘေ့စ်အား မည်သို့သော ကန့်သတ်ချက်များကို ပြောပြသည်။ "sss" အငြင်းအခုံသည် ကန့်သတ်ချက်များဖြစ်သည့် ဒေတာအမျိုးအစားများကို ဖော်ပြသည်။ s character သည် parameter သည် string တစ်ခုဖြစ်ကြောင်း mysql ကိုပြောပြသည်။
အငြင်းအခုံသည် အမျိုးအစားလေးမျိုးထဲမှ တစ်ခု ဖြစ်နိုင်သည်-
- i - ကိန်းပြည့်
- d - နှစ်ဆ
- s - ကြိုးတစ်ချောင်း
- b - BLOB
ကန့်သတ်ချက်တစ်ခုစီအတွက် ၎င်းတို့ထဲမှတစ်ခုရှိရပါမည်။
mysql ကို မျှော်လင့်ရမည့် ဒေတာအမျိုးအစားကို ပြောပြခြင်းဖြင့်၊ ကျွန်ုပ်တို့သည် SQL ထိုးသွင်းခြင်း၏ အန္တရာယ်ကို လျှော့ချပေးသည်။
မှတ်ချက်- ကျွန်ုပ်တို့သည် ပြင်ပအရင်းအမြစ်များမှ မည်သည့်ဒေတာကိုမဆို ထည့်သွင်းလိုပါက (အသုံးပြုသူထည့်သွင်းမှုကဲ့သို့) ဒေတာကို သန့်စင်ပြီး မှန်ကန်ကြောင်း အတည်ပြုရန် အလွန်အရေးကြီးပါသည်။
PDO တွင်ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များ
အောက်ပါဥပမာသည် PDO တွင်ပြင်ဆင်ထားသောထုတ်ပြန်ချက်များနှင့်ဘောင်ဘောင်များကိုအသုံးပြုသည်-
ဥပမာ (PDO ဖြင့် ပြင်ဆင်ထားသော ထုတ်ပြန်ချက်)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
VALUES (:firstname, :lastname, :email)");
$stmt->bindParam(':firstname', $firstname);
$stmt->bindParam(':lastname', $lastname);
$stmt->bindParam(':email', $email);
// insert a row
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();
// insert another row
$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();
// insert another row
$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();
echo "New records created successfully";
} catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>