အိုကေ, မင်းရဲ့လိုအပ်ချက်တွေကိုငါနားလည်တယ်။ PHP မှဆောင်းပါးအကြောင်းအရာများကိုသင်၏လိုအပ်ချက်များနှင့်အညီရေးပါမည်။ ရှေ့နှင့်အဓိကစာသားများကိုအလျားလိုက်မျဉ်းကြောင်းများဖြင့်ခွဲခြားမည်ဖြစ်ပြီးအဓိကစာသားသည် set_local_infile_handler ၏လျှောက်လွှာနှင့်စစ်ဆင်ရေးနည်းလမ်းများကိုရှင်းပြသည်။ ဤတွင်ဆောင်းပါးအပြည့်အစုံဖြစ်သည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Pre- လွတ်လပ်သောကုဒ်ဥပမာ</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ပရိုဂရမ်ပတ် 0 န်းကျင်ကိုစတင်ပါ...\n"</span></span><span>;
</span><span><span class="hljs-variable">$version</span></span><span> = </span><span><span class="hljs-title function_ invoke__">phpversion</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ယခုPHPထင်မြင်ချက်: <span class="hljs-subst">$version</span></span></span><span>\n";
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/*
ဆောင်းပါးခေါင်းစဉ်:set_local_infile_handlerဖိုင်တင်ခြင်းလုပ်ငန်းစဉ်တွင်လုပ်ဆောင်ချက်များ၏လုပ်ဆောင်မှုဥပမာများကဘာတွေလဲ?ဘယ်လိုလည်ပတ်မလဲ?
*/</span>
<span class="hljs-comment">/**
* 1. ဘာလဲ set_local_infile_handler
*
* တည်နေ PHP အလယ်ပိုင်း,set_local_infile_handler ဟုတ်ကဲ့ MySQLi extension ကိုအားဖြင့်ထောက်ပံ့ function ကို,စိတ်ကြိုက်ပြုပြင်ခြင်းသည် MySQL LOAD DATA LOCAL INFILE တင်ထားသောဖိုင်ဒေတာ。
* 它可以让开发者တည်နေ MySQL ကရိယာတန်းဆာ LOAD DATA LOCAL INFILE စစ်ဆင်ရေးအတွင်း,Callback လုပ်ဆောင်ချက်များကိုမှတဆင့်ဖိုင် contptions များကိုကြားဖြတ်ခြင်းနှင့်၎င်းတို့ကိုလုပ်ဆောင်ပါ,ဒေသတွင်းအမှန်တကယ်ဖိုင်များအပေါ်မှီခိုခြင်းမရှိဘဲ。
*
* သဒ္ဒါ:
* mysqli::set_local_infile_handler(mysqli $link, callable $handler): bool
*
* တေးရေး:
* - $link: MySQLi အရာဝတ်ထုများကိုချိတ်ဆက်ပါ
* - $handler: callback function ကို,ဖိုင် contents တွေကို process လုပ်ဖို့အသုံးပြုခဲ့သည်
*
* Value ကိုပြန်သွားပါ:
* - အောင်မြင်စွာပြန်လာပါ true,ပြန်လာရန်မအောင်မြင်ပါ false
*/</span>
<span class="hljs-comment">/**
* 2. ဖိုင်များကိုတင်ပါ set_local_infile_handler နမူနာ
*/</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">"test_db"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->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>->connect_error);
}
</span><span><span class="hljs-comment">// ဖိုင်တင်ပါ</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_local_infile_handler</span></span><span>(function(</span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-variable">$fileHandler</span></span><span>) {
</span><span><span class="hljs-comment">// ယူဆချက် $fileHandler ဟုတ်ကဲ့一个စာချုပ်စာတမ်း流对象</span></span><span>
</span><span><span class="hljs-comment">// ဤတွင်သင်တင်ထားသောအကြောင်းအရာများကိုစစ်ထုတ်နိုင်သည်、ပြောင်းလဲခြင်းသို့မဟုတ်အခြားစစ်ဆင်ရေး</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$fileHandler</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-comment">// နမူနာ:Semicolon နှင့်ကော်မာကိုအစားထိုးပါ</span></span><span>
</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">str_replace</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-string">";"</span></span><span>, </span><span><span class="hljs-variable">$line</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဒေတာအတန်း processing: <span class="hljs-subst">$line</span></span></span><span>\n";
}
});
</span><span><span class="hljs-comment">// ယူဆချက်客户端上传了 CSV စာချုပ်စာတမ်း,服务器端ကရိယာတန်းဆာ LOAD DATA LOCAL INFILE</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = <span class="hljs-string"><<<SQL
LOAD DATA LOCAL INFILE '上传စာချုပ်စာတမ်း.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(username, email, age);
SQL</span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဒေတာကိုအောင်မြင်စွာတင်သွင်း!\n"</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>->error . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
<span class="hljs-comment">/**
* 3. လျှောက်လွှာဇာတ်လမ်းတစ်ပုဒ်
*
* - စာချုပ်စာတမ်း数据预处理:တည်နေ写入数据库之前对数据进行清理、အစားထိုးသို့မဟုတ် format နဲ့。
* - ဒေတာလုံခြုံရေးထိန်းချုပ်မှု:可以对上传စာချုပ်စာတမ်း进行验证,အန္တရာယ်ရှိတဲ့ထိုးဆေးတားဆီး。
* - 避免临时စာချုပ်စာတမ်း存储:无需将စာချုပ်စာတမ်း物理存储တည်နေ服务器,သာ calmback စီးဆင်းမှုကို process。
*/</span>
<span class="hljs-comment">/**
* 4. စစ်ဆင်ရေးခြေလှမ်းများ၏အကျဉ်းချုပ်
*
* 1. အသုံးပြု MySQLi ဒေတာဘေ့စ်ကိုဆက်သွယ်ပါ。
* 2. တယ်လီဖုန်းဆက်ခြင်း set_local_infile_handler 设置callback function ကို。
* 3. တည်နေcallback function ကိုအလယ်ပိုင်း读取和处理စာချုပ်စာတမ်း内容。
* 4. အသုံးပြု LOAD DATA LOCAL INFILE ဒေတာအနေဖြင့်ဒေတာဘေ့စသို့တင်သွင်းပါ。
* 5. အပြောင်းအလဲနဲ့ရလဒ်များအရသက်ဆိုင်ရာအဆင့်အတန်းကိုပြန်သွားပါ。
*/</span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>