လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PDostatement :: Fetchcolumn ကိုအသုံးပြုပြီး SQL ထိုးဆေးပြ issues နာများကိုမည်သို့ရှောင်ရှားရမည်နည်း။

PDostatement :: Fetchcolumn ကိုအသုံးပြုပြီး SQL ထိုးဆေးပြ issues နာများကိုမည်သို့ရှောင်ရှားရမည်နည်း။

gitbox 2025-08-25

PDostatement :: Fetchcolumn ဆိုတာဘာလဲ။

PDostatement :: Flechcolumn သည် PDO မှပေးသောနည်းလမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည်စုံစမ်းမှုရလဒ်အနေဖြင့်အချက်အလက်များအရဒေတာကော်လံတစ်ခုရရှိရန်အထူးအသုံးပြုသည်။ အခြား fetch နည်းလမ်းများနှင့်မတူဘဲ Fetchcolumn သည် စုံစမ်းမှုရလဒ်၏ပထမဆုံးကော်လံကိုသာပြန်လည်ပေးလိမ့်မည်

SQL Query များကိုကွပ်မျက်ခံရသည့်အခါအသုံးပြုသူ input ကို SQL ထုတ်ပြန်ချက်များသို့တိုက်ရိုက်ထည့်သွင်းပါကတိုက်ခိုက်သူသည်အထူးပြုလုပ်ထားသောသွင်းအားစုပြ problems နာများမှတဆင့်စုံစမ်းမှု၏မူလရည်ရွယ်ချက်ကိုကျော်လွှားနိုင်သည်။ PDO မှပေးသော parameter စည်းနှောင်ခြင်းယန္တရားကိုအသုံးပြုခြင်းသည်ဤအန္တရာယ်ကိုတားဆီးနိုင်သည်။


Secure Query အတွက် Fetchcolum ကိုသုံးပါ

SQL Injection ကိုထိရောက်စွာတားဆီးရန် PDO ၏ပြင်ဆင်ထားသည့်ထုတ်ပြန်ချက်များနှင့် parameter binding ကိုသုံးရန်သော့ချက်ဖြစ်သည်။ SQL injection ပြ problems နာများကို SQL querty သို့တိုက်ရိုက်မတူဘဲ SQL query ကို SQL query သို့ parameter အဖြစ် parameter အဖြစ်ဖြတ်သန်းခြင်းဖြင့်ရှောင်ရှားနိုင်သည်။

PDostatement :: Finnolumn နှင့် preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုပြီးလုံခြုံစိတ်ချရသောမေးမြန်းစုံစမ်းမှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုပြသသည့်ဥပမာတစ်ခုဖြစ်သည်။

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// ဒေတာဘေ့စ် connection တစ်ခုဖန်တီးပါ</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=testdb'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</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><span class="hljs-comment">// အသုံးပြုသူထည့်သွင်းမှုကို</span></span><span>
    </span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>];

    </span><span><span class="hljs-comment">// Preprocessing ထုတ်ပြန်ချက်များကိုသုံးပါ,parameters တွေကိုချည်ထား</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 COUNT(*) FROM users WHERE username = :username"</span></span><span>);
    </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</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>, 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>-&gt;</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">$count</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetchColumn</span></span><span>();

    </span><span><span class="hljs-comment">// output query ကိုရလဒ်များ</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အသုံးပြုသူ '<span class="hljs-subst">$username</span></span></span><span>' အကောင့်အရေအတွက်ဖြစ်ပါတယ်: " . </span><span><span class="hljs-variable">$count</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">'ဆက်သွယ်မှုမအောင်မြင်ပါ: '</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><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

ကုဒ်ခွဲခြမ်းစိတ်ဖြာခြင်း

အထက်ပါကုဒ်တွင် SQL Injection ကိုရှောင်ရှားရန် PDO ကြိုတင်အသုံးချသည့်ထုတ်ပြန်ချက်များကိုအသုံးပြုသည်။

  1. ဒေတာဘေ့စ်ဆက်သွယ်မှု - ကျွန်ုပ်တို့သည်ဒေတာဘေ့စ်ဆက်သွယ်မှုကို PDO အသစ် ဖြင့်ဖန်တီးပြီးအမှားအယွင်းများအားလုံးကိုဖမ်းရန်အမှားအယွင်းကိုချမှတ်သည်။

  2. Preprocessing Statement: SQL Querys သည် SQL ၏တိုက်ရိုက်ခွဲစိတ်မှုကြောင့်ဆေးထိုးခြင်းကြောင့်ဖြစ်ပေါ်လာသောအန္တရာယ်များကိုကာကွယ်ရန်အတွက် SQL Conferces နှင့်သီးခြားစီခွဲထားရန် SQL Conferces နှင့်ခွဲထုတ်ရန် ပြင်ဆင်ခြင်း နည်းလမ်းကိုအသုံးပြုသည်။

  3. Binding Parametersters: Bindaram Method ကိုမှတစ်ဆင့်ကျွန်ုပ်တို့သည်သုံးစွဲသူ $ သုံးစွဲသူအမည် ဖြင့်ထည့်သွင်းထားသောတန်ဖိုးရှိ username parameter ကိုခညျြနှောငျ။ ဤသည်အသုံးပြုသူမှထည့်သွင်းထားသောတန်ဖိုးများကိုလုံခြုံစွာလုပ်ဆောင်ခြင်းနှင့် SQL query သို့တိုက်ရိုက်မထည့်သွင်းနိုင်ကြောင်းသေချာစေသည်။

  4. ရလဒ်ကိုရယူပါ။ စုံစမ်းမှုရလဒ်အစုတစ်ခုလုံးကိုပြန်ပို့မည့်အစား (ဤဥပမာတွင်သုံးစွဲသူအကောင့်အရေအတွက်) ကိုရယူရန်အတွက် fltercolumn ကို သုံးပါ။


FetchColumn သည် SQL Injection ကိုအဘယ်ကြောင့်ထိရောက်စွာတားဆီးနိုင်သနည်း။

  1. SQL ချုပ်ကိုရှောင်ကြဉ်ပါ။ Preprocessing ထုတ်ပြန်ချက်များကိုအသုံးပြုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်အသုံးပြုသူ input များကို splicing splicing sql မေးမြန်းချက်များသို့တိုက်ရိုက်ရှောင်ရှားခြင်းကိုလုံးဝရှောင်ရှားနိုင်သည်။ ဤသည် SQL injection ၏အဓိကအရင်းအမြစ်ဖြစ်သည်။ အသုံးပြုသူသည်မည်သည့်အန္တရာယ်ရှိသည့်အကြောင်းအရာကိုမည်သည့်အန္တရာယ်ရှိနေသည်, မှန်ကန်စွာထွက်ပြေးတိမ်းရှောင်ခြင်းနှင့်စုံစမ်းမှု၏တစ်စိတ်တစ်ပိုင်းမဟုတ်ဘဲ parameter အဖြစ်လွန်သွားလိမ့်မည်။

  2. parameter သည် bindetere: အသုံးပြုသူမှထည့်သွင်းထားသောအချက်အလက်များကိုလုံခြုံစွာလုပ်ဆောင်ရန်သေချာစေရန် Bindaram သို့မဟုတ် BindveALAUS binding parameters များကိုသုံးပါ။ PDO သည် Input Values ​​၏ထွက်ပေါက်များကိုအလိုအလျောက်ကိုင်တွယ်ခြင်းနှင့်ဒေတာအမျိုးအစားများပြောင်းလဲခြင်းသည် SQL Injection တိုက်ခိုက်မှုသည် SQL Inject A ဖွဲ့သည် SQL ထုတ်ပြန်ချက်များကိုလိမ္မာပါးနပ်သောသွင်းအားစုများဆွဲဆောင်နိုင်သည်။

  3. ရိုးရှင်းသော Code: Flechcolumn နည်းလမ်းကိုကော်လံတစ်ခုတည်းမှဒေတာများကိုရယူရန်အတွက်အထူးအသုံးပြုသည်။

  • သက်ဆိုင်သောတက်(ဂ်)များ:

    PDOStatement SQL