လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_STMT :: MySQLI_PREPATE () အသုံးပြုမှုဆိုင်ရာအချက်အလက်များနှင့်ပေါင်းစပ်ထားသော $ အမှား

MySQLI_STMT :: MySQLI_PREPATE () အသုံးပြုမှုဆိုင်ရာအချက်အလက်များနှင့်ပေါင်းစပ်ထားသော $ အမှား

gitbox 2025-05-28

PHP Development တွင် Database Operations သည်အထူးသဖြင့် MySQL databases များကို အသုံးပြု. ကျွန်ုပ်တို့၏ဘုံလုပ်ငန်းများဖြစ်သည်။ ဒေတာဘေ့စ်မေးမြန်းချက်များကိုကျွန်ုပ်တို့လုပ်ဆောင်သောအခါအမှားများကိုကျွန်ုပ်တို့ကြုံတွေ့ရသည်။ အကယ်. ကျွန်ုပ်တို့သည်သူတို့ကိုအချိန်မီမပြုလုပ်ပါက၎င်းသည်ပရိုဂရမ်ချွင်းချက်များသို့မဟုတ်ဒေတာဘေ့စ်လုပ်ငန်းများပျက်ကွက်ခြင်းများကိုဖြစ်ပေါ်စေနိုင်သည်။ develber များကို debuggugs and just များကိုပိုမိုထိရောက်စွာကိုင်တွယ်နိုင်ရန်အတွက် PHP ၏ MySQLI_STMM: MySQLI_PREPARE () function နှင့်ပေါင်းစပ်ထားသော $ error property သည်အလွန်အသုံး 0 င်သောကိရိယာများနှင့်ပေါင်းစပ်ထားသည်။

ဤဆောင်းပါးသည် MySQLI_STMT :: MySQLI_Prepare () ကို SQL Query များရှိအမှားအယွင်းများကိုမည်သို့အသုံးပြုရမည်,

1 ။ MySQLI_PREPARE () နှင့် MySQLI_STMT :: MySQLI_STMT ::

MySQLI_PREPATE () SQL ထုတ်ပြန်ချက်များကိုပြင်ဆင်ရန် PHP တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည် SQL ထုတ်ပြန်ချက်များကို MySQL server သို့ကူးပြောင်းနိုင်ပြီးမေးမြန်းမှုအတွက်ပြင်ဆင်ထားသည့်ကြေညာချက်အရာဝတ်ထုတစ်ခုကိုဖန်တီးနိုင်သည်။ MySQLI_STMT အတန်းထဲတွင် $ error attribute မှတစ်ဆင့် SQL ကွပ်မျက်စဉ်အတွင်းအမှားသတင်းအချက်အလက်များကိုရယူနိုင်ပါသည်။

1.1 MySQLI_PREPARE ၏အခန်းကဏ်။

MySQLI_PREPATE () function ကို compille များစုဆောင်းပြီး incoming sql query query statement ကို MySQL server သို့ပို့သည်။ သို့သော်စုံစမ်းမှုကိုချက်ချင်းကွပ်မျက်လိမ့်မည်မဟုတ်ပါ။ ၎င်းသည် query ကိုကွပ်မျက်ခံရနိုင်ပြီး parameters တွေကိုကန့်သတ်နိုင်သည့် MySQLI_STMT အရာဝတ်ထုတစ်ခုကိုပြန်ပို့လိမ့်မည်။ ဤလုပ်ဆောင်ချက်သည် SQL Injection ကိုကာကွယ်ရန်နှင့်သင်၏ကုဒ်၏ဖတ်ရလွယ်ကူမှုနှင့်လုံခြုံမှုကိုတိုးတက်စေသည်။

 $connection = new mysqli("localhost", "username", "password", "database");

if ($connection->connect_error) {
    die("Connection failed: " . $connection->connect_error);
}

// ပြင်ဆင်ထားSQLအသေအချာပေြာဆိုချက်
$stmt = $connection->prepare("SELECT * FROM users WHERE id = ?");

1.2 MySQLI_STMT ၏အခန်းကဏ် ::: $ အမှား

MySQLI_STMMT သည် SQL ထုတ်ပြန်ချက်များကိုလုပ်ဆောင်သည့်အခါအမှားအယွင်းများကိုရရှိရန် $ erral attribute ကိုအသုံးပြုသည်။ အကယ်. စုံစမ်းမှုသည်အောင်မြင်မှုရှိပါက $ အမှား သည်အချည်းနှီးသော string တစ်ခုဖြစ်ပြီး, အကယ်. မေးမြန်းမှုမအောင်မြင်ပါကဤပိုင်ဆိုင်မှုသည်တိကျသောအမှားအယွင်းတစ်ခုသို့ပြန်ပို့ပေးလိမ့်မည်။

 if ($stmt === false) {
    echo "Failed to prepare statement: " . $connection->error;
} else {
    // တစ် ဦး စုံစမ်းမှု execute
    $stmt->execute();
    
    // အမှားများကိုစစ်ဆေးပါ
    if ($stmt->error) {
        echo "Query error: " . $stmt->error;
    } else {
        echo "Query executed successfully!";
    }
}

2 ။ ဒေတာဘေ့စ်စုံစမ်းမှုအမှားများကိုထိရောက်စွာ debug လုပ်နည်း

2.1 MySQLI_Prepare ကို သုံး. SQL ထုတ်ပြန်ချက်များကိုပြင်ဆင်ပါ။

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဒေတာဘေ့စ်လုပ်ငန်းများ, ဆက်သွယ်မှုပြ problems နာများ, ခွင့်ပြုချက်ပြ problems နာများစသဖြင့် SQL အမှားများ, ခွင့်ပြုချက်ပြ problems နာများစသည်တို့ကိုကြုံတွေ့ရနိုင်သည် ဥပမာအားဖြင့်:

 $query = "SELECT * FROM users WHERE id = ?";
$stmt = $connection->prepare($query);

if ($stmt === false) {
    // 如果ပြင်ဆင်ထားအသေအချာပေြာဆိုချက်失败,output error message
    echo "Error preparing statement: " . $connection->error;
} else {
    // parameters တွေကိုချည်ထား
    $stmt->bind_param("i", $userId);
    $stmt->execute();
    
    if ($stmt->error) {
        // 如果တစ် ဦး စုံစမ်းမှု execute失败,output ကိုအသေးစိတ်အမှား
        echo "Query execution failed: " . $stmt->error;
    } else {
        // အောင်မြင်သောစုံစမ်းမှု
        $result = $stmt->get_result();
        while ($row = $result->fetch_assoc()) {
            echo "User: " . $row['name'];
        }
    }
}

ဤနည်းလမ်းသည် SQL ထုတ်ပြန်ချက်များကိုပြင်ဆင်ခြင်းသို့မဟုတ်ကွပ်မျက်ခံရသည့်အခါအမှားအယွင်းများကိုချက်ချင်းရိုက်ကူးနိုင်ကြောင်းသေချာစေသည်။

2.2 SQL Query များကို debugging အတွက်အမှားအယွင်းများ

Debugging လုပ်သည့်အခါ MySQLI_STMT ၏ပါဝင်သည့်အကြောင်းအရာများကိုစစ်ဆေးသောအခါ :: $ အမှားသည် ရှာဖွေမှုတွင်အမှားအယွင်းများ၏အကြောင်းရင်းကိုလျင်မြန်စွာရှာဖွေရန်ကူညီနိုင်သည်။ ဥပမာအားဖြင့်, syntax မှားယွင်းနေလျှင်သို့မဟုတ်စားပွဲတင်အမည်မှားယွင်းလျှင်, အမှားအယွင်းများကိုသင်ရှာဖွေရန်ကူညီရန်အတွက်အမှားအချက်အလက်များပါ 0 င မည်။

ဥပမာအားဖြင့်:

 $stmt = $connection->prepare("SELECT * FROM non_existent_table WHERE id = ?");
if ($stmt === false) {
    echo "Prepare failed: " . $connection->error;
} else {
    $stmt->execute();
    if ($stmt->error) {
        echo "Execution failed: " . $stmt->error;
    }
}

ဤကိစ္စတွင် ဒေါ်လာ stmt-> အမှားသည် "table" daton_existent_table 'daton_existent_table' 'မတည်ရှိပါ "ဟူသောအမှားအယွင်းတစ်ခုသို့ပြန်ပို့နိုင်သည်။

2.3 အမှားသစ်ထုတ်လုပ်ခြင်း

MySQLI_STMT :: MySQLI_Prepare () MySqli_prepare () , အမှားတစ်ခုဖြစ်ပေါ်သည့်အခါမှတ်တမ်းများကိုသင်မှတ်တမ်းတင်နိုင်သည်။ ဥပမာအားဖြင့်:

 function logError($errorMsg) {
    file_put_contents('error_log.txt', $errorMsg . "\n", FILE_APPEND);
}

$query = "SELECT * FROM users WHERE id = ?";
$stmt = $connection->prepare($query);
if ($stmt === false) {
    logError("Error preparing statement: " . $connection->error);
} else {
    $stmt->execute();
    if ($stmt->error) {
        logError("Error executing query: " . $stmt->error);
    }
}

ဤနည်းလမ်းသည်သင့်အားအချိန်နှင့်တပြေးညီပြ problems နာများကိုရှာဖွေတွေ့ရှိရန်သာမကနောက်ပိုင်းတွင်အသေးစိတ်ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက်အချက်အလက်များကိုလည်းမှတ်တမ်းတင်ထားသည်။

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

MySQLI_STMT :: MySQLI_PREPATE () သည်ဒေတာဘေ့စ်စုံစမ်းမှုအမှားများကိုဖြေရှင်းရန်အတွက်သင်၏စွမ်းဆောင်ရည်ကိုထိထိရောက်ရောက်တိုးတက်အောင်ပြုလုပ်နိုင်သည်။ SQL ထုတ်ပြန်ချက်များကိုပြင်ဆင်ခြင်းအားဖြင့် Query များကိုစစ်ဆေးခြင်းနှင့်အသေးစိတ်အမှားအယွင်းများကိုမှတ်တမ်းတင်ခြင်းနှင့်အသေးစိတ်အချက်အလက်များကိုမှတ်တမ်းတင်ခြင်းအားဖြင့်ပြ problems နာများကိုပိုမိုတိကျစွာရှာဖွေတွေ့ရှိနိုင်ပြီးအလားအလာရှိသောအမှားများကိုအလျင်အမြန်ဖြေရှင်းနိုင်ရန်နှင့်အစီအစဉ်အစဉ်အလာကိုလျင်မြန်စွာပြင်ဆင်နိုင်သည်။

ကျိုးကြောင်းဆီလျော်သောအမှားများကိုကိုင်တွယ်ခြင်းနှင့် debugging မဟာဗျူဟာများကို ဖြတ်. ဖွံ့ဖြိုးတိုးတက်မှုဆိုင်ရာစွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်လုပ်နိုင်ရုံသာမကလျှောက်လွှာတည်ငြိမ်မှုနှင့်သုံးစွဲသူအတွေ့အကြုံများကိုလည်းတိုးတက်စေနိုင်သည်။

ဤဆောင်းပါးသည်သင့်အားပိုမိုကောင်းမွန်သော debugge နှင့် Database Query အမှားများကိုကူညီနိုင်လိမ့်မည်ဟုမျှော်လင့်ပါသည်။ သင့်တွင်မေးခွန်းများရှိပါကသို့မဟုတ်နောက်ထပ်ရှင်းပြချက်လိုအပ်ပါက ကျေးဇူးပြု. ဆွေးနွေးရန်သတင်းပို့ပါ။