လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI_STMTT :: bind_param function ကိုအသုံးပြုသောအခါဘုံအမျိုးအစားပြောင်းလဲခြင်းအမှားများကဘာတွေလဲ။ အဲဒါကိုဘယ်လိုရှောင်နိုင်မလဲ။

MySQLI_STMTT :: bind_param function ကိုအသုံးပြုသောအခါဘုံအမျိုးအစားပြောင်းလဲခြင်းအမှားများကဘာတွေလဲ။ အဲဒါကိုဘယ်လိုရှောင်နိုင်မလဲ။

gitbox 2025-09-12

1 ။ Parameter type Mismatch

MySQLI_STMT :: Bind_Param ၏ဒုတိယ pareter သည်အောက်ပါစာလုံးများဖြစ်နိုင်သော binding variable အမျိုးအစားကိုသတ်မှတ်ရန်အသုံးပြုသည်။

  • i : ကိန်း

  • D : နှစ်ထပ် pletoating type (နှစ်ဆ)

  • S : String (string)

  • B : Binary Data (BLOB)

အသုံးအများဆုံးအမျိုးအစားပြောင်းလဲခြင်းအမှားအယွင်းတစ်ခုမှာ bind_param သို့ဖြတ်သွားသော variable အမျိုးအစားသည်မျှော်လင့်ထားသည့်အမျိုးအစားနှင့်ကိုက်ညီမှုမရှိပါ။ ဥပမာအားဖြင့်, အကယ်. သင်သည်ကိန်း ( 1 ) ကို SQL ကြေငြာချက်တွင်အမှန်တကယ်မျှော်လင့်သော်လည်း String အမျိုးအစား Variable ကိုအမှန်တကယ်ဖြတ်သန်းသွားမည်ဆိုပါက MySQL သည် string ကို 0 သို့မဟုတ်အမှားတစ်ခုသို့ပြောင်းလဲလိမ့်မည်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM users WHERE age = ?"</span></span><span>);
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-string">"25"</span></span><span>; </span><span><span class="hljs-comment">// string အမျိုးအစား</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>); </span><span><span class="hljs-comment">// binding အမျိုးအစားအမှား,ဒါဟာကိန်းဂဏန်းဖြစ်သင့်သည်(i)</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

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

 <span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">25</span></span><span>; </span><span><span class="hljs-comment">// ၎င်းသည်ကိန်းဂဏန်းအမျိုးအစားတစ်ခုဖြစ်ကြောင်းသေချာပါစေ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>); </span><span><span class="hljs-comment">// binding ကိန်း</span></span><span>
</span></span>

2 ။ Null တန်ဖိုးကိုဖြတ်သန်းသည့်အခါအမှား

MySQLI_STMT :: bind_param function သည် null တန်ဖိုးများကိုထုတ်လုပ်သည့်အခါအထူးဖြစ်သည်။ PHP တွင် NULL သည် အတိအလင်းချည်နှောင်ထားရမည် ဒီလိုမှမဟုတ်ရင်ကွပ်မျက်မှုကျရှုံးမှုဒါမှမဟုတ်မမှန်ကန်ပါ။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, age) VALUES (?, ?)"</span></span><span>);
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">"John"</span></span><span>;
</span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>; </span><span><span class="hljs-comment">// nullအဘိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"si"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>); </span><span><span class="hljs-comment">// အမှား,တိုက်ရိုက်ချည်နှောင်လို့မရဘူးNULL</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

ဖြေရှင်းချက် -
Null တန်ဖိုးများကိုချည်နှောင်သောအခါ, Bind_param သည် Null ၏တိုက်ရိုက်စည်းမျဉ်းများကိုမပံ့ပိုးပါ အသုံးအများဆုံးနည်းလမ်းမှာ MySQLI_STMT :: Send_long_data ကို သုံးရန်ဖြစ်သည်။ သို့သော်၎င်းသည် null တန်ဖိုးများကိုကိုင်တွယ်ရန် ပို. ခက်ခဲသည်။

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$age</span></span><span> === </span><span><span class="hljs-literal">null</span></span><span>) {
    </span><span><span class="hljs-variable">$age</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// 或者根据实际需求设置一个默认အဘိုး</span></span><span>
}
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"si"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$age</span></span><span>); </span><span><span class="hljs-comment">// ချည်နေှာင်默认အဘိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

3 ။ string ကိုနှင့်နံပါတ်ရှုပ်ထွေးမှုများ

တခါတရံတွင်ကျွန်ုပ်တို့သည်နံပါတ်များကိုကြိုးကြိုးများအဖြစ်ဖြတ်သန်းခြင်းသို့မဟုတ်အခြားလမ်းတစ်လမ်းများကြုံတွေ့ရသည်။ MySQL သည်အချို့သောကိစ္စရပ်များတွင်အမျိုးအစားပြောင်းလဲမှုများကိုအလိုအလျောက်လုပ်ဆောင်လိမ့်မည်ဖြစ်သော်လည်း၎င်းသည်စွမ်းဆောင်ရည်ပြ issues နာများသို့မဟုတ်ကြိုတင်ခန့်မှန်း။ မရသောအပြုအမူကိုဖြစ်ပေါ်စေနိုင်သည်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM products WHERE price = ?"</span></span><span>);
</span><span><span class="hljs-variable">$price</span></span><span> = </span><span><span class="hljs-number">199.99</span></span><span>; </span><span><span class="hljs-comment">// 价格是浮动数အဘိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$price</span></span><span>); </span><span><span class="hljs-comment">// အမှား,အသုံးပြုသင့်သည်d(double)ပုံနှိပ်စာ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

ဖြေရှင်းချက် -
အကယ်. သင်သည် floating value ကိုဖြတ်သန်းသွားပါက s (string) အစား t အမျိုးအစား d (နှစ်ဆ) ကိုသေချာစွာသုံးပါ။ ၎င်းသည်မှန်ကန်သောဒေတာအမျိုးအစား pass ကိုသေချာစေရုံသာမကမေးမြန်းမှု၏ထိရောက်မှုကိုလည်းပိုမိုကောင်းမွန်စေသည်။

 <span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"d"</span></span><span>, </span><span><span class="hljs-variable">$price</span></span><span>); </span><span><span class="hljs-comment">// ချည်နေှာင်浮动数အဘိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

4 ။ parameters တွေကိုအဖြစ် array သို့မဟုတ်အရာဝတ်ထု

Bind_param သည် ရိုးရှင်းသောစကေးအမျိုးအစားများ (အရေးပါသော, floating တန်ဖိုး, string, string, binary data) ကိုသာထောက်ပံ့သည်။ အကယ်. Array တစ်ခုသို့မဟုတ်အရာဝတ်ထုလွန်သွားလျှင် bind_param ကျရှုံးလိမ့်မည်။ ထို့ကြောင့်, ရှုပ်ထွေးသောဒေတာအမျိုးအစားများမသွားမီအချက်အလက်များကိုကြိုတင်သတ်မှတ်ထားရန်လိုအပ်သည်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (preferences) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$preferences</span></span><span> = [</span><span><span class="hljs-string">"color"</span></span><span> =&gt; </span><span><span class="hljs-string">"blue"</span></span><span>, </span><span><span class="hljs-string">"size"</span></span><span> =&gt; </span><span><span class="hljs-string">"L"</span></span><span>]; </span><span><span class="hljs-comment">// 数组ပုံနှိပ်စာ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$preferences</span></span><span>); </span><span><span class="hljs-comment">// အမှား,Array ကိုတိုက်ရိုက်ချည်နှောင်။ မရပါ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

ဖြေရှင်းချက် -
Array သို့မဟုတ်အရာဝတ်ထုတစ်ခုကိုမဖြတ်ခင်က၎င်းကို JSON string သို့မဟုတ်အခြားပုံစံသို့ခေါ်ယူရန်လိုအပ်သည်။

 <span><span><span class="hljs-variable">$preferences</span></span><span> = </span><span><span class="hljs-title function_ invoke__">json_encode</span></span><span>([</span><span><span class="hljs-string">"color"</span></span><span> =&gt; </span><span><span class="hljs-string">"blue"</span></span><span>, </span><span><span class="hljs-string">"size"</span></span><span> =&gt; </span><span><span class="hljs-string">"L"</span></span><span>]);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$preferences</span></span><span>); </span><span><span class="hljs-comment">// ချည်နေှာင်JSONကြိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

5 ။ အရေအတွက်ကအရမ်းကြီးလွန်းတယ်,

ချည်နံပါတ်သည်သတ်မှတ်ထားသောအမျိုးအစားအများဆုံးအကွာအဝေးထက်ကျော်လွန်ပါကအမျိုးအစားပြောင်းလဲခြင်းအမှားတစ်ခုပေါ်ပေါက်လာလိမ့်မည်။ ကိန်းဂဏန်းများ ( 1 ) အတွက်များသောအားဖြင့် -2,147,483,648 မှ 2,147,483,647 အထိရှိသည်။ floating တန်ဖိုးများအတွက် ( ) ) အတွက်အကွာအဝေးကပိုကြီးပေမယ့်အထက်ကန့်သတ်ချက်တစ်ခုရှိသေးတယ်။

အမှားဥပမာ -

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_numbers (value) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1000000000000</span></span><span>; </span><span><span class="hljs-comment">// အလွန်ကြီးမားသောနံပါတ်များ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"i"</span></span><span>, </span><span><span class="hljs-variable">$value</span></span><span>); </span><span><span class="hljs-comment">// အမှား,နံပါတ်များသည်ကိန်းဂဏန်းများမှထွက်နေသည်</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

ဖြေရှင်းချက် -
အကယ်. လွန်သွားသောနံပါတ်သည်ကိန်းဂဏန်းများကိုပြင်ပတွင်ရှိပါကရေငွေ့များကိုရှောင်ရှားရန် floating type ( ) ) ကိုသုံးနိုင်သည်။

 <span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"d"</span></span><span>, </span><span><span class="hljs-variable">$value</span></span><span>); </span><span><span class="hljs-comment">// 使用双精度浮动数အဘိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>
  • သက်ဆိုင်သောတက်(ဂ်)များ:

    mysqli_stmt