ဒေတာဘေ့စ်လုပ်ငန်းများအတွက် PHP ၏ MySQLI extension ကိုအသုံးပြုသောအခါ MySQLI_RESULT :: ARDSTRESS TRAsST :: ဤပိုင်ဆိုင်မှုသည် (Blob, စာသားကဲ့သို့) binary သို့မဟုတ် variable lumme fields များနှင့်ဆက်ဆံရာတွင်အထူးသဖြင့်အသုံးဝင်သည်။ သို့သော်လယ်ကွင်းအရှည်သည်မျှော်လင့်ထားသည့်သို့မဟုတ်သတ်မှတ်ထားသောကန့်သတ်ချက်ထက်ကျော်လွန်မနေမအောင်မြင်ပါကသင်မည်သို့သိရှိသနည်း။ ဤဆောင်းပါးသည်ဤပန်းတိုင်သို့မည်သို့အောင်မြင်ရန်မည်သို့နားလည်ရန်တစ်ဆင့်ပြီးတစ်ဆင့်သင့်ကိုခြေလှမ်းတစ်လျှောက်ခြေလှမ်းလျှောက်ပါလိမ့်မည်။
mysqli_result :: $ အရှည်သည် MySQLI_RESULT OFF ၏ attribute တစ်ခုဖြစ်သည်။ Array တွင် element တစ်ခုစီသည် array တစ်ခုစီ၏ Byte အရှည်ကိုကိုယ်စားပြုသည်။ ဤတန်ဖိုးသည်ဒေတာဘေ့စ်လယ်၏သတ်မှတ်ထားသောအရှည်မဟုတ်ဘဲအချက်အလက်များ၏အမှန်တကယ်အရှည်ဖြစ်သည်။
ကျွန်ုပ်တို့တွင်အောက်ပါ MySQL စားပွဲတင်ဖွဲ့စည်းပုံရှိသည်ဆိုပါစို့။
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(20),
bio TEXT
);
ဒေတာဘေ့စ်မှရယူထားသော Username Field သည် Varchar (20) ၏ကန့်သတ်ချက်ထက်မကျော်လွန်နိုင်ကြောင်းသေချာစေလိုပါသည်။
ကျွန်ုပ်တို့သည်ကွင်းဆင်းလေ့မှုနှင့် $ ရလဒ်များကိုရှာဖွေရန် Field Definition နှင့် $ ရလဒ်များ >>> လမ်းမကြီးသည်ရှည်လျားလွန်းသည်ကိုနားလည်သဘောပေါက်ရန်အလွှာကိုပေါင်းစပ်နိုင်သည်။
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "SELECT id, username, bio FROM users";
$result = $mysqli->query($query);
if ($result) {
// Field Deference အချက်အလက်ကိုရယူပါ
$fields = $result->fetch_fields();
while ($row = $result->fetch_assoc()) {
$lengths = $result->lengths;
foreach ($fields as $index => $field) {
$fieldName = $field->name;
$maxLength = $field->length;
// မှတ်သား:အတွက် VARCHAR နှင့် CHAR လယ်ကွင်း,$field->length ဒါဟာဇာတ်ကောင်အရှည်ပါပဲ * ဇာတ်ကောင်အစုံအတွက် bytes အများဆုံးအရေအတွက်
// အမှန်တကယ်ပြောင်းလဲခြင်းကိုဇာတ်ကောင်အစုံနှင့်ပေါင်းစပ်ရန်လိုအပ်သည်,ဒီမှာယူဆတယ် UTF-8(အများဆုံး 3-4 ဒရယ်/လူသူမ)
$expectedBytes = $maxLength * 4;
if ($lengths[$index] > $expectedBytes) {
echo "လယ်ကွင်း '{$fieldName}' အဆိုပါအကြောင်းအရာအရှည်မျှော်လင့်ထားသည့်ကန့်သတ်ကျော်လွန်:{$lengths[$index]} ဒရယ်\n";
}
}
}
}
$mysqli->close();
?>
$ field-> အရှည်ကို များသောအားဖြင့်အများဆုံး bytes အများဆုံးအရေအတွက်နှင့်ဇာတ်ကောင်အရှည်နှင့်မတူနိုင်ပါ။ အထူးသဖြင့် Multi-byte ဇာတ်ကောင်အစုံ (UTF-8 ကဲ့သို့) ကိုအသုံးပြုသောအခါ bytes နှင့်အက္ခရာများအကြားဆက်နွယ်မှုကိုပြောင်းလဲရမည်။
Blob (သို့) စာသားအမျိုးအစားကွက်လပ်များအတွက် MySQL ကိုယ်တိုင်ကပိုကြီးတဲ့အရှည်ကိုခွင့်ပြုထားသဖြင့်စီးပွားရေးယုတ္တိဗေဒအပေါ် အခြေခံ. ကန့်သတ်ချက်စံသတ်မှတ်ချက်များကိုစိတ်ကြိုက်ပြုလုပ်ရန်လိုအပ်သည်။
အကယ်. လယ်ကွက်သည်လွတ်မြောက်လာပြီး encapled ခဲ့လျှင်, ထို့ကြောင့် $ ရလဒ် -> အရှည်များကို ခန့်မှန်းခြေအားဖြင့်သာအသုံးပြုနိုင်သည်။ အမှန်တကယ်အသုံးပြုသောအခါစီးပွားရေးစည်းမျဉ်းစည်းကမ်းများနှင့်အတူတရားစီရင်ခြင်းကိုပေါင်းစပ်ရန်အကြံပြုထားပါသည်။
အကန့်အသတ်မဲ့သောနယ်ပယ်များသည်ဒေတာအရင်းအမြစ်ပြ problems နာများသို့မဟုတ်စီးပွားရေးဆိုင်ရာယုတ္တိဗေဒအမှားများအတွက်မှတ်တမ်းသို့ဝင်ရောက်နိုင်သည်။
if ($lengths[$index] > $expectedBytes) {
file_put_contents("/var/log/field_overflow.log", date('c') . " - လယ်ကွင်း '{$fieldName}' ကန့်သတ်ကျော်လွန်。အရှည်: {$lengths[$index]}\n", FILE_APPEND);
}
သင်သည် https://gitbox.net/api/api/api/api/api/api/api/api/notify?tength နှင့်ဆင်တူသော interface ကိုခေါ်ဆိုနိုင်သည်။ သတိပေးချက်များကိုသတိပြုပါ။
MySQLI_RESULT :: $ အရှည် နှင့် fetch_fields () ပေါင်းစပ်ခြင်းအားဖြင့်ဒေတာဘေ့စ်ရှိလယ်ကွင်းအရှည်သည်မျှော်လင့်ချက်များနှင့်ကိုက်ညီမှုရှိမရှိကိုထိရောက်စွာစောင့်ကြည့်နိုင်သည်။ ဘာသာစကားမျိုးစုံနှင့်မျိုးစုံအစုံစနစ်များတွင်ဤရှာဖွေတွေ့ရှိမှုသည်အထူးအရေးကြီးသည်နှင့် developer များကြိုတင်အချက်အလက်ပြ problems နာများကိုကြိုတင်ရှာဖွေတွေ့ရှိရန်ကူညီနိုင်သည်။ စနစ်၏ကြံ့ခိုင်မှုကိုတိုးတက်စေရန်အချက်အလက်တင်သွင်းမှုနှင့်သုံးစွဲသူထည့်သွင်းမှုကဲ့သို့သောမြင့်မားသောအန္တရာယ်ဖြစ်စဉ်များတွင်ထိုကဲ့သို့သောယုတ္တိဗေဒလုပ်ငန်းစဉ်များတွင်ပေါင်းစပ်ရန်အကြံပြုသည်။