လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> MySQLI :: user_result function ကိုမှတစ်ဆင့် PHPM မှတ်ဉာဏ်ပြ problem နာကိုမည်သို့ထိရောက်စွာရှောင်ရှားနိုင်မည်နည်း။

MySQLI :: user_result function ကိုမှတစ်ဆင့် PHPM မှတ်ဉာဏ်ပြ problem နာကိုမည်သို့ထိရောက်စွာရှောင်ရှားနိုင်မည်နည်း။

gitbox 2025-08-27
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ဤကုဒ်၏ဤအပိုင်းသည်ဆောင်းပါး၏အကြောင်းအရာများနှင့်လုံးဝမသက်ဆိုင်ပါ,သာဥပမာ placeholder အတွက်သာ</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဒီဆောင်းပါးကိုဖတ်ရန်လှိုက်လှဲစွာကြိုဆိုပါသည်,ဤဆောင်းပါးသည်မည်သို့အသုံးပြုရမည်ကိုဆွေးနွေးပါမည်mysqli::use_resultfunction ကိုရှောင်ရှားPHPမှတ်ဥာဏ်လျှံပြ problem နာ。"</span></span><span>;

</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
 * ဘယ်လိုဖြတ်သန်းရမလဲmysqli::use_resultလုပ်ဆောင်ချက်များကိုထိရောက်စွာရှောင်ရှားသည်PHPမှတ်ဥာဏ်လျှံပြ problem နာ?
 *
 * တည်နေPHPအလယ်ပိုင်း,အသုံးပြုMySQLဘယ်အချိန်မှာဒေတာဘေ့စ,စုံစမ်းမှုရလဒ်သည်ကြီးမားသည့်အခါမှတ်ဥာဏ်လျှံနှင့်အတူပြ problems နာများမကြာခဏပြ problems နာများရှိသည်。特别是当အသုံးပြုmysqliကြီးမားသောရလဒ်အစုံ၏ quiex စုံစမ်းမေးမြန်းခြင်းကွပ်မျက်တိုးချဲ့,
 * အားလုံးရလဒ်များကိုတစ်ပြိုင်နက်တည်းမှတ်ဉာဏ်သို့တင်ဆောင်လျှင်,ဖြစ်ပေါ်ဖို့အလွန်လွယ်ကူသည်PHPမှတ်ဉာဏ်ကုန်ပြီ,အစီအစဉ်ပျက်ကျခြင်း。
 *
 * mysqliစုံစမ်းမှုရလဒ်များရရှိရန်နည်းလမ်းနှစ်ခုကိုပေးသည်:store_result()နှင့်use_result()。
 * 
 * 1. store_result():
 *    ပုံမှန်နည်းလမ်း,会将整个结果集一次性取回并缓存တည်နေ客户端内存အလယ်ပိုင်း。
 *    ကြီးမားသောဒေတာ volume အတွက်,အလွန်ကြီးမားတဲ့မှတ်ဉာဏ်သုံးစွဲမှု。
 * 
 * 2. use_result():
 *    အသုံးပြု"အတန်းအဆင့်"ဘယ်လိုရယူရမလဲ,အားလုံးရလဒ်အားလုံးကိုပြန်လည်ရယူလိမ့်မည်မဟုတ်ပါ,အဲဒီအစား, ကွန်ယက်မှတဆင့်ဒေတာကိုဖတ်ပါ。
 *    这样可以显著降低内存အသုံးပြု,မှတ်ဥာဏ်လျှံကိုရှောင်ကြဉ်ပါ。
 *
 * 本文重点讲解如何合理အသုံးပြုmysqli::use_result()避免မှတ်ဥာဏ်လျှံပြ problem နာ。
 */</span>

<span class="hljs-comment">/**
 * အသုံးပြုmysqli::use_resultအတွက်နမူနာကုဒ်
 */</span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'localhost'</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-string">'database'</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_errno) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"ဆက်သွယ်မှုမအောင်မြင်ပါ: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// တစ် ဦး စုံစမ်းမှု execute</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">real_query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM large_table"</span></span><span>)) {

    </span><span><span class="hljs-comment">// သွားuse_resultရလဒ်ကိုရယူပါ,ဒေတာအမြောက်အများကိုတစ်ပြိုင်နက်တည်းတင်ခြင်းကိုရှောင်ပါ</span></span><span>
    </span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">use_result</span></span><span>();

    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
        </span><span><span class="hljs-comment">// လိုင်းအားဖြင့်ဒေတာလိုင်း process,မှတ်ဉာဏ်အသုံးပြုမှုကိုလျှော့ချပါ</span></span><span>
        </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
            </span><span><span class="hljs-comment">// ဒေတာတစ်ခုချင်းစီကိုအတန်းတိုင်းလုပ်ငန်းစဉ်,ဥပမာအားဖြင့် output ကိုသို့မဟုတ်ဖိုင်တစ်ခုသို့ရေးပါ</span></span><span>
            </span><span><span class="hljs-comment">// echo $row['column_name'] . PHP_EOL;</span></span><span>
        }

        </span><span><span class="hljs-comment">// လွှတ်ပေးရန်ရလဒ်အရင်းအမြစ်များကိုသတ်မှတ်</span></span><span>
        </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
    } </span><span><span class="hljs-keyword">else</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">$mysqli</span></span><span>-&gt;error;
    }

} </span><span><span class="hljs-keyword">else</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">$mysqli</span></span><span>-&gt;error;
}

</span><span><span class="hljs-comment">// ဆက်သွယ်မှုကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();

<span class="hljs-comment">/*
 * အသေးစိတ်ဖော်ပြချက်:
 *
 * 1. စာဖတ်ခြင်း streaming:
 *    အသုံးပြုuse_result(),MySQLဆာဗာသည်ရလဒ်များကို client ကိုတစ်ပြိုင်တည်းပေးပို့လိမ့်မည်မဟုတ်ပါ,အဲဒီအစား, ဆက်သွယ်မှုကိုစောင့်ရှောက်လော့,
 *    client ကိုလိုင်းအားဖြင့်လိုင်းဖတ်ပါ。这样避免了大量数据တည်နေ内存အလယ်ပိုင်း积累。
 * 
 * 2. မှတ်သားရန်အရာ:
 *    - တည်နေအသုံးပြုuse_result()နာရီ,ရလဒ်များသို့မဟုတ်ခေါ်ဆိုမှုအားလုံးကိုပထမ ဦး စွာဖတ်ရမည်free(),သို့မှသာစုံစမ်းမှုကွပ်မျက်ခံရနိုင်သလား。
 *    - ရောထွေးမရနိုင်ပါstore_result()နှင့်use_result(),ဆက်သွယ်မှုပိတ်ဆို့ခြင်းကိုရှောင်ပါ。
 *    - ကွန်ယက်ချိတ်ဆက်မှုကိုထိန်းသိမ်းထားရမည်,读取过程不能အလယ်ပိုင်း断。
 *
 * 3. စွမ်းဆောင်ရည်နှိုင်းယှဉ်:
 *    ခြားနားstore_result(),use_result()စွမ်းဆောင်ရည်အချို့ငွေပမာဏ(မျိုးစုံကွန်ယက်အပြန်အလှန်ဆက်သွယ်မှုလိုအပ်သည်),
 *    但显著减少了内存အသုံးပြု,ကြီးမားသောဒေတာဇာတ်လမ်းအတွက်သင့်တော်သည်。
 *
 * 4. သက်ဆိုင်တဲ့အခြေအနေများ:
 *    - ရှာဖွေမှုရလဒ်များသည်အလွန်ကြီးမားသည်,တစ်ကြိမ်မှာ တင်. မရပါ。
 *    - အတုံးများတွင်ရလဒ်များကို process ဖို့လိုအပ်ပါတယ်,ဖိုင်တစ်ခုသို့စာရေးလျှင်、Pagination ပို့ကုန်စသည်တို့。
 *
 * အကျဉ်းချုပ်:
 * အသုံးပြုmysqli::use_result()streaming query ကိုအကောင်အထည်ဖော်,ဟုတ်ကဲ့ရှောင်ကြဉ်ပါPHPမှတ်ဥာဏ်လျှံအတွက်ထိရောက်သောနည်းဗျူဟာ。
 * developer များကို data line ကိုလိုင်းဖြင့်ရယူရန်ခွင့်ပြုသည်,降低内存峰值အသုံးပြု,ဤသည်ပရိုဂရမ်တည်ငြိမ်မှုကိုတိုးမြှင့်。
 */</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>
  • သက်ဆိုင်သောတက်(ဂ်)များ:

    mysqli