PHP တွင် PDO (PHP Data Obserts) တွင်ဒေတာဘေ့စ်များကိုရယူရန်ပေါ့ပါးသောနည်းလမ်းဖြစ်သည်။ MySQL, Postgresql, SQLite စသည့်ဒေတာဘေ့စ်အမျိုးအစားများကိုထောက်ပံ့သည် ။ ၎င်းသည် SQL injection ပြ problems နာများကိုရှောင်ရှားရုံသာမက Code ၏ထိန်းသိမ်းနိုင်မှုနှင့်ဖတ်နိုင်မှုကိုလည်းတိုးတက်စေသည်။ ဤဆောင်းပါးသည် parameters များကိုချည်နှောင်ရန် bindvalue ကို မည်သို့မှန်ကန်စွာအသုံးပြုရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
PDostatement :: Bindvalue သည် SQL ကြေငြာချက်ကိုတန်ဖိုးထားရန် PDO တွင်အသုံးပြုသောသတ်မှတ်ထားသော poDeter သည်သတ်မှတ်ထားသော parameter ဖြစ်သည်။ ဤနည်းလမ်းသည် parameter တစ်ခုအတွက်တန်ဖိုးကိုချည်နှောင်ထားပြီး SQL ကြေငြာချက်ကိုအကောင်အထည်ဖော်သည့်အခါ placevers များကို SQL ကြေငြာချက်တွင်အလိုအလျောက်အစားထိုးနိုင်သည်။ ဤသို့ပြုလုပ်ခြင်းအတွက်အကျိုးကျေးဇူးများနှစ်ခုရှိသည်။
SQL Injection Attacks ကိုရှောင်ကြဉ်ပါ ။
Code သည်ရှင်းရှင်းလင်းလင်းနှင့်ထိန်းသိမ်းရန်လွယ်ကူသည် ။ Placevolvers နှင့် Parameters ၏အသုံးပြုမှုကိုအသုံးပြုခြင်းသည် SQL ထုတ်ပြန်ချက်များကိုပိုမိုရှင်းလင်းစွာခွဲခြားထားပြီးနောက်ပိုင်းတွင်ပြုပြင်ရန်လွယ်ကူသည်။
bindvalue နည်းလမ်း၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
<span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-title function_ invoke__">bindValue</span></span><span>(</span><span><span class="hljs-variable">$parameter</span></span><span>, </span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$data_type</span></span><span> = PDO::</span><span><span class="hljs-variable constant_">PARAM_STR</span></span><span>);
</span></span>
$ parameter : ဤသည် placeholder တစ်ခုဖြစ်သော SQL ကြေငြာချက်တစ်ခုတွင် placeholder (ဥပမာ - သုံးစွဲသူအမည် ) သို့မဟုတ်မေးခွန်းတစ်ခုသို့မဟုတ်မေးခွန်းတစ်ခုတွင် Mark Placeholder ( ? ) ။
$ တန်ဖိုး - ခညျြနှောငျခံရဖို့လိုအပ်ပါတယ်တန်ဖိုး။
$ ဒေတာ (optional ကို): ခညျြနှောငျတန်ဖိုးအမျိုးအစား။ PDO :: Param_str (Default), PDO :: Param_int , POSTOM, PDO:: Param_bool နှင့်အခြားအမျိုးအစားများ။
အသုံးပြုသူနှင့်မေးမြန်းမှုအပေါ် အခြေခံ. အသုံးပြုသူနှင့်မေးမြန်းမှု၏အသေးစိတ်အချက်အလက်များကိုအသေးစိတ်အချက်အလက်များရရှိရန်စုံစမ်းမှုကိုအကောင်အထည်ဖော်လိုသည်ဆိုပါစို့။
<span><span><span class="hljs-meta"><?php</span></span><span>
</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 အသေအချာပေြာဆိုချက်,အမည်ရှိ placeholders ကိုသုံးပါ</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE username = :username"</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>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-comment">// အသုံးပြု bindValue parameters တွေကိုချည်ထား</span></span><span>
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'john_doe'</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindValue</span></span><span>(</span><span><span class="hljs-string">':username'</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">PARAM_STR</span></span><span>);
</span><span><span class="hljs-comment">// တစ် ဦး စုံစမ်းမှု execute</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-comment">// ရလဒ်များကိုရယူပါ</span></span><span>
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></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-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$user</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
အထက်ဖော်ပြပါကုဒ်များ - Username သည် SQL ကြေ ငြာ ချက်တွင် placeholder ဖြစ်သည် ။ SQL ကွပ်မျက်ခံရသည့်အခါ - အသုံးပြုသူအမည်ကို John_Doe ဖြင့်အစားထိုးသည်။
Placeholders အမည်များအပြင်, မေးခွန်းအမှတ်အသား ( ? ) ကို placeholder အဖြစ်သုံးနိုင်သည်။ ဤတွင်မေးခွန်းတစ်ခုကို Mark PlaceHTERESH ကိုအသုံးပြုခြင်း၏ဥပမာတစ်ခုမှာ -
<span><span><span class="hljs-meta"><?php</span></span><span>
</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">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE username = ?"</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>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-comment">// အသုံးပြု bindValue parameters တွေကိုချည်ထား</span></span><span>
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'jane_doe'</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindValue</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">PARAM_STR</span></span><span>); </span><span><span class="hljs-comment">// ပထမ ဦး ဆုံးမေးခွန်းကို Mark placeholder ကိုချည်နှောင်</span></span><span>
</span><span><span class="hljs-comment">// တစ် ဦး စုံစမ်းမှု execute</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-comment">// ရလဒ်များကိုရယူပါ</span></span><span>
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></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-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$user</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
ဤဥပမာတွင်ကျွန်ုပ်တို့သည်ပထမမေးခွန်း Mark placeH placehardolder ကို bindvalue နည်းလမ်း၏ပထမဆုံး parameter 1 ဖြင့်ချည်နှောင်ထားသည်။ သတိပြုရန်မှာ Mark Placeholders များသည် 1 တွင်မဟုတ်ဘဲ 1 တွင်စတင်သည်ကိုသတိပြုပါ။
SQL parameters များကိုချည်နှောင်ရန် Bindvalue နှင့် Bindaram တို့သည် နှစ် ဦး စလုံးအသုံးပြုကြသော်လည်း၎င်းတို့အကြားသိမ်မွေ့သောကွဲပြားခြားနားမှုအချို့ရှိသည်။
Bindvalue သည် placefolder ကိုချက်ချင်းချည်နှောင်ထားပြီးနောက်ဆက်တွဲကွပ်မျက်မှုမည်သို့ပင်ရှိပါစေ,
BindParam သည် variable ကိုရည်ညွှန်းသည်။ ဆိုလိုသည်မှာဤ variable ၏တန်ဖိုးကို SQL ကြေငြာချက်မချမှတ်မီပြုပြင်မွမ်းမံခြင်းအားဖြင့်ပြုပြင်ထားသော parameters များကိုလည်းပြောင်းလဲသွားလိမ့်မည်။
ဥပမာအားဖြင့်:
<span><span><span class="hljs-meta"><?php</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">// အသုံးပြု bindValue</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE username = :username"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'john_doe'</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindValue</span></span><span>(</span><span><span class="hljs-string">':username'</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>);
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'jane_doe'</span></span><span>; </span><span><span class="hljs-comment">// ပြုပြင်မွမ်းမံ variable ကိုတန်ဖိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>(); </span><span><span class="hljs-comment">// 查询会အသုံးပြု john_doe</span></span><span>
</span><span><span class="hljs-comment">// အသုံးပြု bindParam</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE username = :username"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'john_doe'</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bindParam</span></span><span>(</span><span><span class="hljs-string">':username'</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>);
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'jane_doe'</span></span><span>; </span><span><span class="hljs-comment">// ပြုပြင်မွမ်းမံ variable ကိုတန်ဖိုး</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>(); </span><span><span class="hljs-comment">// 查询会အသုံးပြု jane_doe</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
အပေါ်ကပြထားတဲ့အတိုင်း Bindvalue ဟာ လွန်စွာကူးယူထားတဲ့ကန ဦး တန်ဖိုးကိုအသုံးပြုသည်။ Bindaram သည် ပြုပြင်ထားသောတန်ဖိုးကိုအသုံးပြုသည်။
SQL Injection ကိုကာကွယ်ခြင်း - SQL injection တိုက်ခိုက်မှုများကို Placeholders နှင့် Binding Parametersters မှထိရောက်စွာရှောင်ရှားနိုင်သည်။
တူညီသောစုံစမ်းမှုကိုအကြိမ်ကြိမ်လုပ်ဆောင်ပါ ။ သင်တူညီသောစုံစမ်းမှုကိုအကြိမ်ကြိမ်လုပ်ဆောင်ရန်လိုအပ်သည့်အခါအကြိမ်ပေါင်းများစွာလုပ်ဆောင်ရန်လိုအပ်ပါကကွဲပြားခြားနားသော parameters တွေကိုအချိန်အတိုင်းအတာတစ်ခုအထိသာလုပ်ခြင်းကိုပြုလုပ်နိုင်သည် ။
Readability နှင့်ထိန်းသိမ်းမှု - placeholder နှင့် parameter ကိုအသုံးပြုခြင်းသည် SQL ထုတ်ပြန်ချက်များကိုပိုမိုရှင်းလင်းစေနိုင်သည်, အထူးသဖြင့်ရှုပ်ထွေးသောမေးမြန်းချက်များတွင်ဖတ်ရန်နှင့်နားလည်ရန်ပိုမိုလွယ်ကူစေသည်။
PDostatement :: Bindvalue သည် Code ၏လုံခြုံရေးနှင့်ဖတ်နိုင်မှုကိုတိုးမြှင့်နေစဉ် binding parameter များကိုကွပ်မျက်ခြင်းဖြင့် SQL ထုတ်ပြန်ချက်များအားဖြင့် SQL ထုတ်ပြန်ချက်များအားလွယ်ကူချောမွေ့စေသောအလွန်အသုံးဝင်သောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းကိုမှန်ကန်စွာအသုံးပြုခြင်းသည် developer များ SQL Injection ကိုရှောင်ရှားရန်နှင့်ဒေတာဘေ့စ်မေးမြန်းချက်များ၏ယုံကြည်စိတ်ချရမှုကိုသေချာစေရန်ကူညီနိုင်သည်။ ရှုပ်ထွေးသောဒေတာဘေ့စ်အပြန်အလှန်ဆက်သွယ်မှုများနှင့်ဆက်ဆံရာတွင် PDO ၏အသုံးပြုမှုကိုကျွမ်းကျင်မှုသည် PHP developer တိုင်းအတွက်မဖြစ်မနေလိုအပ်သည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
PDOStatement