လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_STMT ::

MySQLI_STMT ::

gitbox 2025-05-29

PHP တွင် MySQLI_STMT :: ပြင်ဆင်ခြင်း သည်ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များအတွက်အဓိကနည်းလမ်းဖြစ်သည်။ ၎င်းသည် SQL ဆေးထိုးခြင်းနှင့်ကွပ်မျက်ခြင်းထိရောက်မှုကိုထိရောက်စွာတားဆီးနိုင်သည်။ သို့သော်ငွေသွင်းငွေထုတ်ရေးလုပ်ငန်းစဉ်များတွင် MySQLI_STMT ကိုအသုံးပြုသောအခါ, ကြိုတင်ပြင်ဆင်မှု အချို့ကိုသင်မကြာခဏကြုံတွေ့ရလေ့ရှိပြီးအရောင်းအ 0 ယ်အချို့ကိုသင်မကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ ဤဆောင်းပါးသည်ဤဘုံအန္တရာယ်များကိုအသေးစိတ်လေ့လာပြီးသက်ဆိုင်ရာဖြေရှင်းနည်းများကိုပေးလိမ့်မည်။

1 ။ အရောင်းအ 0 ယ်များနှင့်ကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များအကြားအခြေခံဆက်ဆံရေး

ငွေပေးငွေယူသည်ဤလုပ်ငန်းများအောင်မြင်ရန်လိုအပ်သည့်ဒေတာဘေ့စ်စီမံခန့်ခွဲမှုတွင်စစ်ဆင်ရေးအစုတစ်ခုဖြစ်သည်။ MySQLI ၏ငွေပေးငွေယူထိန်းချုပ်မှုကို အသုံးပြု. အောက်ပါနည်းလမ်းကိုများသောအားဖြင့်ဟုခေါ်သည်။

 $mysqli->begin_transaction();
$mysqli->commit();
$mysqli->rollback();

MySQLI_STMT :: Binds SQL ထုတ်ပြန်ချက်များနှင့်ရှေ့ပြေးများကိုပြင်ဆင်ပါ ။ ၎င်းသည် SQL ကြေငြာချက်သည်တရားဝင်ဖြစ်ကြောင်းသေချာစေရန်မှန်ကန်စွာအသုံးပြုသည်။

2 ။ ဘုံအန္တရာယ်များနှင့်ဖြေရှင်းချက်

1 ။ ကြိုတင်ပြင်ဆင်ချက်ကိုကြိုတင်ကြေငြာချက်အားဖြင့်မစစ်ဆေးပါ

Pit Point : $ stmt = $ MySQLI-> ပြင်ဆင်ခြင်း ($ SQL); $ stmt သည် မှားယွင်းသော ရှိမရှိစစ်ဆေးသည်မဟုတ်။ ပြင်ဆင်မှုမအောင်မြင်ပါက SQL syntax အမှားအယွင်းများသို့မဟုတ်အခြားအကြောင်းပြချက်များဆိုပါကငွေပေးငွေယူသည်ဆက်လက်လုပ်ဆောင်နိုင်ပြီးနောက်ဆက်တွဲစစ်ဆင်ရေးသည်အမှားတစ်ခုဖြစ်လာပြီးငွေပေးချေမှုမှာအမှားတစ်ခုဖြစ်လာနိုင်သည်။

ဖြေရှင်းရန် :

 $stmt = $mysqli->prepare($sql);
if ($stmt === false) {
    $mysqli->rollback();
    throw new Exception('Prepare failed: ' . $mysqli->error);
}

အရောင်းအ 0 ယ်တစ်ခုတွင်, ပြင်ဆင်ရန်ပြင်ဆင်ခြင်း,

2 ။ ကြိုတင်ငွေဖြည့်ခြင်းမပြုမီကွပ်မျက်ခံရသည်

အချက်များ - တစ်ခါတစ်ရံတွင် developer သည် ဒေါ်လာ stmt = $ MySQLI-> ပြင်ဆင်ရန် ($ SQL); $ MySQLI-> စတင်ရန် () စတင်ရန် မခေါ်မီ။ သို့သော်အချို့သော MySQL ဗားရှင်း (သို့) configurations များအရကြိုတင်ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များကိုအလိုအလျောက်သွယ်ဝိုက်စွာကျူးလွန်မိသည်။

ဖြေရှင်းရန် :

အရောင်းအ 0 ယ်ကို ဦး စွာစတင်ရန်သေချာအောင်လုပ်ပါ။

 $mysqli->begin_transaction();
$stmt = $mysqli->prepare($sql);
// နောက်ဆက်တွဲ binding နှင့်ကွပ်မျက်

3 ။ အမျိုးမျိုးသော SQL ထုတ်ပြန်ချက်များကိုအသုံးပြုသောအခါမတူပါနှင့်

ရမှတ်များ - ကြိုတင်မဆိုထုတ်ပြန်ချက်များသည် SQL ထုတ်ပြန်ချက်များကိုတစ်ပြိုင်တည်းရေးသားခြင်းကိုမထောက်ခံပါ။ အကယ်. ဒေါ်လာ SQL တွင် Semicolons မှခွဲထွက်မှုများစွာပါ 0 င်ပါကပြင်ဆင်မှုသည်ကျရှုံးလိမ့်မည်။

ဖြေရှင်းရန် :

တစ်ခုတည်းသော SQL ကြေငြာချက်တစ်ခုတည်းကိုသာပြင်ဆင်ထားပြီးလိုအပ်ပါကထုတ်ပြန်ချက်များစွာကိုခွဲခြားသတ်မှတ်ရန်သေချာစေပါ။

4 ။ parameters တွေကိုခညျြနှောငျရန်ပျက်ကွက်ခြင်းဒေတာခြွင်းချက်မှန်ကန်စွာဖြစ်ပေါ်စေသည်

PIT POINT : Parameter သည်မတိုက်ဆိုင်သည့်ပုံစံများသို့မဟုတ်ခြုံငုံမ 0 င်သော place နာများသို့မဟုတ်နေရာချထားသူအားလုံးကဲ့သို့သောအရာကွပ်မျက်ခြင်းအမှားများကိုဖြစ်ပေါ်စေပြီးငွေပေးငွေယူသည်နောက်ဆုံးတွင်ပျက်ကွက်လိမ့်မည်။

ဖြေရှင်းရန် :

ဤကဲ့သို့သောခညျြနှောငျ parameteters အမျိုးအစားနှင့်အရေအတွက်ကမှန်ကန်ကြောင်းသေချာစေရန်သေချာပါစေ:

 $stmt->bind_param('si', $name, $id);

နှင့် bind_param ၏ပြန်လာတန်ဖိုးကိုစစ်ဆေးပါ။

5 ။ Preprocessing ကြေညာချက်ကိုပိတ်ရန်မေ့လျော့

Pit Point : အကယ်. ဒေါ်လာ stmt-> အနီးကပ် () ကို အရောင်းအ 0 ယ်မတိုင်မီမခေါ်ပါ။

ဖြေရှင်းရန် :

ငွေပေးငွေယူသည်အဆုံးမတိုင်မီ ဒေါ်လာ stmt-> အနီးကပ် () ကိုဖုန်းဆက်ပါ။

6 ။ အမှားကိုင်တွယ်ခြင်းနှင့်ခြွင်းချက်ဖမ်းမိခြင်း

Pit Point : uncraught just or error rol or, ငွေပေးငွေယူကိုစနစ်တကျကျူးလွန်ခြင်းသို့မဟုတ်နောက်ကျောကိုပြန်လှိမ့်ခြင်းခံရခြင်းမပြုရ။

ဖြေရှင်းရန် :

Try-catch ဖွဲ့စည်းပုံကိုအသုံးပြုခြင်း,

 try {
    $mysqli->begin_transaction();

    $stmt = $mysqli->prepare($sql);
    if ($stmt === false) {
        throw new Exception($mysqli->error);
    }

    $stmt->bind_param('si', $name, $id);
    $stmt->execute();

    $mysqli->commit();
} catch (Exception $e) {
    $mysqli->rollback();
    echo "Transaction failed: " . $e->getMessage();
}

3 ။ ပြီးပြည့်စုံသောဥပမာ

 <?php
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

try {
    $mysqli->begin_transaction();

    $sql = "UPDATE users SET name = ? WHERE id = ?";
    $stmt = $mysqli->prepare($sql);
    if ($stmt === false) {
        throw new Exception('Prepare failed: ' . $mysqli->error);
    }

    $name = 'Alice';
    $id = 123;
    if (!$stmt->bind_param('si', $name, $id)) {
        throw new Exception('Bind param failed: ' . $stmt->error);
    }

    if (!$stmt->execute()) {
        throw new Exception('Execute failed: ' . $stmt->error);
    }

    $stmt->close();

    $mysqli->commit();
    echo "Transaction succeeded.";
} catch (Exception $e) {
    $mysqli->rollback();
    echo "Transaction failed: " . $e->getMessage();
}

$mysqli->close();
?>

4 ။ အကျဉ်းချုပ်

  • ငွေပေးငွေယူစတင်ပြီးနောက် ကြိုတင်ပြင်ဆင်ထားရန် အမြဲတမ်း execute ။

  • ပြင်ဆင်ခြင်း , bind_param ၏ပြန်လာတန်ဖိုးများကိုစစ်ဆေးပြီး execute လုပ်ပါ

  • တစ်ခုချင်းစီကိုတစ် ဦး တည်းသာထုတ်ပြန်ချက်များသာဖြစ်စဉ်များကိုသာ ပြင်ဆင်ထားသည်

  • ခြွင်းချက်ဖြစ်ပေါ်သည့်အခါငွေပေးငွေယူကိုပြန်လှိမ့်လှန်ဖို့သေချာပါစေ။

  • preprocessing ကြေညာချက်အရင်းအမြစ်ကိုပိတ်ပါ။

အထက်ဖော်ပြပါအသေးစိတ်ဖော်ပြချက်များကိုအောက်ပါအသေးစိတ်အချက်အလက်များ သည် MySQLI_STMT :: ငွေပေးချေမှုအတွက်တွေ့ကြုံမှုများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။