SQL Delete ထုတ်ပြန်ချက်များကိုတည်ဆောက်ရာတွင် developer အများအပြားသည်ကြိုးများကိုတိုက်ရိုက်ပြုလုပ်လေ့ရှိသည်။
$id = $_GET['id'];
$sql = "DELETE FROM users WHERE id = $id";
ဤနည်းလမ်းသည် SQL ဆေးထိုးတိုက်ခိုက်မှုများကိုအလွန်အားနည်းနေသည်။ ဥပမာအားဖြင့်, အန္တရာယ်ရှိတဲ့အသုံးပြုသူ 1 သို့မဟုတ် 1 = 1 ဖြတ်သန်းပါကစားပွဲတစ်ခုလုံး၏အကြောင်းအရာများကိုဖျက်ပစ်လိမ့်မည်။
PDO ၏ POPOCING ထုတ်ပြန်ချက်များကို အသုံးပြု. ဤပြ problem နာကိုလုံးဝရှောင်ရှားနိုင်သည်။ ၎င်းသည် SQL မှဒေတာများမှအချက်အလက်များကိုဒေတာများကိုသီးခြားစီဒေတာများကို SQL ထုတ်ပြန်ချက်များ၏တစ်စိတ်တစ်ပိုင်းအဖြစ်အဓိပ္ပာယ်ဖွင့်ဆိုရန်သေချာစေရန်။
PDO ကို အသုံးပြု. အသုံးပြုသူမှတ်တမ်းများကိုဖျက်ရန်လုံခြုံသောနည်းလမ်းဖြစ်သည်။
<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$username = 'root';
$password = 'your_password';
try {
$pdo = new PDO($dsn, $username, $password);
// ချွင်းချက်မှအမှား mode ကိုသတ်မှတ်ပါ
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// ကြိုတင်ပြင်ဆင်မှုများ
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
// parameters တွေကိုချည်နှောင်ခြင်းနှင့် execute
$id = 5; // ဥပမာတစ်ခုကနေဥပမာသို့မဟုတ် URL ရယူသုံးစွဲသူများID
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
if ($stmt->rowCount()) {
echo "မှတ်တမ်းများကိုအောင်မြင်စွာဖျက်လိုက်ပြီ。";
} else {
echo "ကိုက်ညီသောမှတ်တမ်းမရှိပါ。";
}
} catch (PDOException $e) {
echo "ဒေတာဘေ့စ်အမှား: " . $e->getMessage();
}
?>
ဤဥပမာတွင်ကျွန်ုပ်တို့သည် : ID placeholder ကို အသုံးပြု. ဒေတာအမျိုးအစားတွင်ရှေ့နောက်ညီညွတ်မှုကိုသေချာစေရန် Bindaram မှတစ်ဆင့် variable များကို bindies မှတစ်ဆင့်ခုတ်ပါ။
တစ်ခါတစ်ရံတွင်အသုံးပြုသူရဲ့ login စံချိန်ကိုသတ်သတ်မှတ်မှတ်သတ်မှတ်ခြင်းကဲ့သို့သောဖျက်ခြင်းအခြေအနေတစ်ခုထက်ပိုသည်။
<?php
$stmt = $pdo->prepare("DELETE FROM login_logs WHERE user_id = :user_id AND login_time < :before_time");
$user_id = 3;
$before_time = '2024-01-01 00:00:00';
$stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$stmt->bindParam(':before_time', $before_time);
$stmt->execute();
အကယ်. ဖျက်ခြင်းအခြေအနေများကို dynamically ထုတ်ပေးသည်ဆိုပါကရှေ့အဆုံးမှ cheat box များရှိသည့်အကွက်များကိုသုတ်လိမ်းခြင်းကဲ့သို့သော dynamically ထုတ်ပေးသည်ဆိုပါက၎င်းကိုသင်တည်ဆောက်နိုင်သည်။
<?php
$ids = [2, 5, 7]; // ပုံစံသို့မဟုတ်ရှေ့အဆုံးကနေ ID စာရင်း
// placeholder တစ်ခုတည်ဆောက် SQL
$placeholders = implode(',', array_fill(0, count($ids), '?'));
$sql = "DELETE FROM users WHERE id IN ($placeholders)";
$stmt = $pdo->prepare($sql);
// Execution ကြေငြာချက်,အားလုံး parameters တွေကိုချည်နှောင်
$stmt->execute($ids);
ဤချဉ်းကပ်မှုသည်အိမ်ရာတွင်သိုလှောင်ထားသူများ၏စွမ်းရည်ကို ရယူပြီး လုံခြုံစိတ်ချရသောနှင့်ပြောင်းလွယ်ပြင်လွယ်ရှိသော arays သို့သွားရန် လုပ်ဆောင်သည် ။
အသုံးပြုသူ input ကို SQL သို့တိုက်ရိုက်မကြည့်ပါနှင့်။
binding parameters တွေကိုအသုံးပြုတဲ့အခါဒေတာအမျိုးအစားများကိုသတ်မှတ်တဲ့အခါ (ဥပမာ PDO :: Param_int ) ကိုပြသတဲ့အခါလုံခြုံရေးနဲ့စွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်တယ်။
ဖျက်ခြင်းမပြုမီ, operty operty တည်ရှိရှိမရှိအတည်ပြုရန်ရွေးချယ်မှုစစ်ဆေးမှုကိုသင်လုပ်ဆောင်နိုင်သည်။
မတော်တဆဖျက်ခြင်းကိုရှောင်ရှားရန်ငွေပေးငွေယူ ( beginransacingsaction () /) / commit () / ကျူးလွန် ) ကိုသုံးပါ။
အကယ်. သင်သည် HTTP တောင်းဆိုမှုအပေါ် အခြေခံ. စံချိန်ကိုဖျက်လိုပါက httpace ကို httpace မှတစ်ဆင့် https://m66.net/api/api/api/delete_user.php?id=9 , သင်ဤကဲ့သို့သောရေးထားနိုင်သည်။
<?php
if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['id'])) {
$id = (int) $_GET['id'];
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
echo json_encode([
'success' => true,
'message' => 'အသုံးပြုသူကိုအောင်မြင်စွာပယ်ဖျက်',
]);
} else {
http_response_code(400);
echo json_encode([
'success' => false,
'message' => 'တောင်းဆိုမှုတရားမဝင်ဖြစ်ပါတယ်',
]);
}
?>
interface ဒီဇိုင်းတွင် Input Verification နှင့် Parameter သည် APIs မှတစ်ဆင့်တိုက်ခိုက်မှုများမှကာကွယ်ရန်အာရုံစိုက်သင့်သည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
PDOStatement