လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement မခေါ်မီမည်သည့်သော့ချက်ဗဟုသုတ :: Execute ()? ဘုံအမှားများကိုရှောင်ရှားရန်နည်းလမ်းများကားအဘယ်နည်း။

PDostatement မခေါ်မီမည်သည့်သော့ချက်ဗဟုသုတ :: Execute ()? ဘုံအမှားများကိုရှောင်ရှားရန်နည်းလမ်းများကားအဘယ်နည်း။

gitbox 2025-08-04

1 ။ PDO နိဒါန်းနှင့်ကြိုတင်ထုတ်ပြန်ချက်များ

PDO (PHP Data Obserts) သည်ဒေတာဘေ့စ်စီမံခန့်ခွဲမှုစနစ်များ (DBMSS) နှင့်အပြန်အလှန်ဆက်သွယ်ခွင့်ပြုသည့်ဒေတာဘေ့စ်များကိုရယူရန်အတွက် interface တစ်ခုဖြစ်သည်။ PDO ကို အသုံးပြုခြင်း၏အဓိကလက်ခဏာတစ်ခုမှာပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များမှတစ်ဆင့်မေးမြန်းချက်များကိုလုပ်ဆောင်နိုင်စွမ်းဖြစ်သည်။ ဤချဉ်းကပ်နည်းသည်စွမ်းဆောင်ရည်တိုးတက်လာရုံသာမက SQL injection တိုက်ခိုက်မှုများကိုထိထိရောက်ရောက်ကာကွယ်နိုင်သည်။

ကြိုတင်အသုံးချခြင်းထုတ်ပြန်ချက်များကိုအများအားဖြင့်အဆင့်နှစ်ဆင့်ခွဲထားသည်။

  1. တိကျသည် - sql ထုတ်ပြန်ချက်များ,

  2. Execution : addute () နည်းလမ်းကို placeholder အစားအမှန်တကယ်ဒေတာကို အသုံးပြု. execute () နည်းလမ်းကိုခေါ်ဆိုခြင်းဖြင့်လုပ်ဆောင်ပါ။

 <span><span><span class="hljs-comment">// ဖန်တီး PDO နမူနာ</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=test'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);

</span><span><span class="hljs-comment">// တလံဒေသကြီးနာ SQL အသေအချာပေြာဆိုချက်</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 id = :id"</span></span><span>);

</span><span><span class="hljs-comment">// parameters တွေကိုခညျြနှောငျခြင်းနှင့် quent ကို execute</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><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);
</span></span>

2 ။ parameter သည် binding နှင့် placeholder

မခေါ်ဆိုမီ () , parameter binding ကိုမည်သို့အသုံးပြုရမည်ကိုနားလည်ရန်အလွန်အရေးကြီးသည်။ PDO သည်ဘုံအရံသမားနှစ်ယောက်ကိုထောက်ပံ့ပေးသည်။

  • Placeholders ဟုခေါ်သော - ဥပမာ - ကုဒ်၏ဖတ်နိုင်မှုနှင့်ထိန်းသိမ်းခြင်းကိုတိုးတက်စေနိုင်သော ID ကဲ့သို့သော ID ကဲ့သို့ဖြစ်သည်။

  • Mark PlaceH PlaceH PlaceHTERORE : ဥပမာ - ကဲ့သို့သောအခြေအနေများမှတစ်ဆင့် parameters တွေကိုချည်နှောင်ထားသည်။

 <span><span><span class="hljs-comment">// အမည်ရှိ placeholders ကိုသုံးပါ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 id = :id"</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><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);

</span><span><span class="hljs-comment">// မေးခွန်း Mark placeholders မေးခွန်းကိုသုံးပါ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 id = ?"</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><span class="hljs-number">1</span></span><span>]);
</span></span>

3 ။ အမှားကိုင်တွယ်

execute () ကို ခေါ်ဆိုသောအခါအမှားကိုင်တွယ်သည်အထူးအရေးကြီးသည်။ PDO သည်အမှားအယွင်းများကိုပုံမှန်အားဖြင့်သတိပေးချက်များဖြင့်ပစ်ချသည် ပရိုဂရမ်၏ကြံ့ခိုင်မှုကိုသေချာစေရန်, အမှားကိုင်တွယ်ဘို့ခြွင်းချက် mode ကိုအသုံးပြုရန်အကြံပြုသည်။

 <span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=test'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
</span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">setAttribute</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>);
</span></span>

ဤနည်းအားဖြင့်အမှားအယွင်းများသည်ကွပ်မျက်ခံရစဉ် (ဥပမာ SQL အမှားများသို့မဟုတ် parameter rom orоментияဆိုင်ရာပြ issues နာများ) တွင်ပေါ်ပေါက်လာပါက PDO သည်ပရိုဂရမ်မာကိုဖမ်းနိုင်ပြီးကိုင်တွယ်နိုင်သည်။

 <span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 id = :id"</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><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Error: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>

4 ။ parametery အမျိုးအစားများကိုမှန်ကန်စွာအသုံးပြုခြင်း

Execute () နည်းလမ်းကို parameters များကိုဖြတ်သန်းသွားသော parameters များသည် SQL ကြေညာချက်တွင်ဒေတာအမျိုးအစားနှင့်ကိုက်ညီကြောင်းသေချာစေပါ။ ဥပမာအားဖြင့်, ဒေတာဘေ့စ်စားပွဲရှိကွက်လပ်တစ်ခုရှိသည့်ကွက်လပ်တစ်ခုသည်ကိန်းဂဏန်းများကိုအမျိုးအစားတစ်ခုဖြစ်ပါကကိန်းဂဏန်းများအနေဖြင့်သတ်မှတ်ထားသည့်အခါကိန်းဂဏန်းအမျိုးအစားများကိုထုတ်ပြန်သင့်သည်။

 <span><span><span class="hljs-comment">// အမှား:ကိန်းအစား string ကိုဖြတ်သန်း</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 id = :id"</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><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-string">'one'</span></span><span>]);

</span><span><span class="hljs-comment">// မှန်ကန်သော:传递မှန်ကန်သော的数据类型</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 id = :id"</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><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);
</span></span>

5 ။ အကြိမ်ပေါင်းများစွာ ကွပ်မျက် ရာတွင်မှတ်သားရန်အရာ

တစ်ခါတစ်ရံတွင်ကျွန်ုပ်တို့သည်တူညီသော SQL ထုတ်ပြန်ကြေငြာချက်ကိုအကြိမ်ကြိမ်အလားတူအကြိမ်ကြိမ်လုပ်ဆောင်ရန်လိုအပ်သည်။ ဤကိစ္စတွင်သင်ကွဲပြားခြားနားသော parameters တွေကိုနှင့်အတူစုံစမ်းမှုတစ်ခုချင်းစီကိုအကြိမ်ကြိမ်အကောင်အထည်ဖော်ရန် execute () ကို သုံးနိုင်သည်, သို့သော် ကွပ်မျက်ခံရ တိုင်းယခင်က binde သတင်းအချက်အလက်များကိုရှင်းရှင်းလင်းလင်းဖော်ပြလိမ့်မည်ကိုသတိပြုသင့်သည်။ ထို့ကြောင့် SQL ကိုအကြိမ်ပေါင်းများစွာအတူတူပင်ပန်းစွာလုပ်ဆောင်သောအခါ parameters တွေကိုအချိန်တိုင်းပြန်လည်ပတ်ရန်အကြံပြုသည်။

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 = :age"</span></span><span>);

</span><span><span class="hljs-variable">$ages</span></span><span> = [</span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>, </span><span><span class="hljs-number">40</span></span><span>];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$ages</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$age</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><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-variable">$age</span></span><span>]);
    </span><span><span class="hljs-comment">// အပြောင်းအလဲများရလဒ်များ</span></span><span>
}
</span></span>

6 ။ Execute () တန်ဖိုးကိုပြန်ယူပြီးရလဒ်ရ

execute () ၏ပြန်အမ်းငွေ () နည်းလမ်း () နည်းလမ်းကိုနည်းလမ်းကတော့အောင်မြင်မှုအောင်မြင်မှုရှိမရှိဖော်ပြသည်။ Select Selecties အတွက်ရှာဖွေမှုရလဒ်များရရန် fetch သို့မဟုတ် fetchall နည်းလမ်းကိုအသုံးပြုရန်လိုအပ်သည်။

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</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 id = :id"</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><span class="hljs-string">'id'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>]);

</span><span><span class="hljs-comment">// တစ်ခုတည်းလိုင်းရလဒ်များကိုရယူပါ</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>);

</span><span><span class="hljs-comment">// ရလဒ်အားလုံးကိုရယူပါ</span></span><span>
</span><span><span class="hljs-variable">$results</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetchAll</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>);
</span></span>

သတိပြု သင့်သည် () သည် query ရလဒ်ကိုအလိုအလျောက်ပြန်ပို့လိမ့်မည်မဟုတ်ကြောင်းသတိပြုသင့်သည်။ ၎င်းသည် SQL ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်ရန်သာတာ 0 န်ရှိသည်

7 ။ Calling Execute အတွက်သာမန်အမှားများနှင့်ရှောင်ရှားခြင်းနည်းလမ်းများ ()

Execute () ကို အသုံးပြုသည့်အခါ (), ပရိုဂရမ်မာများသည်အောက်ပါတို့အမှားများကိုကြုံတွေ့ရတတ်သည်။

  • parameter type mispatch : SQL ရှိဒေတာအမျိုးအစားသည် butt parameter ၏ဒေတာအမျိုးအစားနှင့်ကိုက်ညီကြောင်းသေချာပါစေ။

  • parameters တွေကို binding ကိုမေ့လျော့ SQL ကြေငြာချက်နှင့် execute လုပ်ခြင်း () parameterscers များကတစ် ဦး ချင်းစီကိုက်ညီမှုရှိမရှိစစ်ဆေးပါ။

  • မှားယွင်းသော SQL syntax : အထူးသဖြင့် placewers များကိုအသုံးပြုသောအခါ SQL syntax မှန်ကန်မှုကိုသေချာအောင်လုပ်ပါ။

  • PDostatement Object တွင် အကြိမ်ကြိမ် အကောင်အထည်ဖော်သည့် အခါ pdostatement အရာဝတ်ထုကိုအကြိမ်ကြိမ်အကောင်အထည်ဖော်သည့်အခါ parameters များကိုအချိန်တိုင်းကွပ်မျက်ရန်သေချာစေပါ။

ဤပြ problems နာများကိုရှောင်ရှားရန် SQL ထုတ်ပြန်ချက်များ, parameter များနှင့်အချက်အလက်များနှင့်ဒေတာအမျိုးအစားများကိုဂရုတစိုက်စစ်ဆေးရန် () မခေါ်မီ () ။

အကျဉ်းချုပ်

PDostatement :: PDOSTATTETESS ကိုမခေါ်မီ () လုပ်ထုံးလုပ်နည်းများကိုလုပ်ဆောင်ခြင်း၏လုပ်ရပ်၏လုပ်ရပ်များကိုနားလည်ရန်အလွန်အရေးကြီးသည်။ parameter ၏စည်းလုံးမှုနည်းပါးခြင်း, ဤဗဟုသုတကိုကျွမ်းကျင်ခြင်းသည် code ၏လုံခြုံရေးနှင့်စွမ်းဆောင်ရည်ကိုမြှင့်တင်ပေးရုံသာမကသာမန်အမှားများကိုဖြစ်ပေါ်စေနိုင်ပြီးကုဒ်၏ထိန်းသိမ်းမှုကိုတိုးမြှင့်စေသည်။ ဤအမှားများကိုရှောင်ရှားခြင်းအားဖြင့် developer များပိုမိုထိရောက်သောနှင့်ခိုင်မာတဲ့ဒေတာဘေ့စစစ်ဆင်ရေးကုဒ်များကိုရေးနိုင်ပါတယ်။