PHP တွင်သင်သည်ဒေသဖိုင်တစ်ခုမှဒေတာများကို MySQL ဒေတာဘေ့စ်သို့တင်သွင်းရန်လိုအပ်ပါကများသောအားဖြင့်သင်သည်ပုံမှန်အားဖြင့် load data local infile statement ကိုအသုံးပြုလေ့ရှိသည်။ သို့သော်လုံခြုံရေးအကြောင်းပြချက်များကြောင့်အချို့သောပတ်ဝန်းကျင်တွင်ဤအင်္ဂါရပ်ကိုပိတ်ထားနိုင်သည်။ MySQLI :: set_local_infile_handler မှတဆင့် local files များဖတ်ရှုခြင်း၏အပြုအမူကို PHP သည်အခြားရွေးချယ်စရာတစ်ခုပေးသည်။ ၎င်းသည်လုံခြုံရေးကိုမြှင့်တင်ရုံသာမက developer များကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ပေးသည်။
MySQL ၏ဒေသတင်သွင်းမှုကိုအကောင်အထည်ဖော်ရန် set_local_infile_handler () function ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ရှင်းပြပါမည်။
MySQLI :: set_local_infile_handler () PHP တွင် MySQLI extension မှပေးသောနည်းလမ်းဖြစ်သည်။ ဒေတာဒေသခံတိကျသော 0 န် ဆောင်မှုပေးသည့်အခါဒေသဆိုင်ရာဖိုင်ပါသောအချက်အလက်များကိုအသုံးပြုသူသတ်မှတ်ထားသော callback function မှတဆင့်၎င်းကိုဖတ်ရှုရန်အသုံးပြုသည်။
အခြေခံ syntax:
<span><span>mysqli::</span><span><span class="hljs-variable constant_">set_local_infile_handler</span></span><span> ( </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$read_func</span></span><span> ) : </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>$ Read_Func သည်အချက်အလက်များကိုစာဖတ်ခြင်းနှင့်ထုတ်လွှင့်ခြင်းကိုကိုင်တွယ်သောအသုံးပြုသူသတ်မှတ်ထားသော function ကိုဖြစ်သည်။
၎င်းကိုအသုံးမပြုမီ, အောက်ပါတို့ကိုမှန်ကန်စွာ configure လုပ်ရန်သေချာစေရန်လိုအပ်သည်။
MySQL server-side တွင် local_infile တွင်ပါ 0 င်သည်။
<span><span><span class="hljs-keyword">SHOW</span></span><span> VARIABLES </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'local_infile'</span></span><span>;
</span></span>အကယ်. ပိတ်ထားပါ က၎င်းကို server configuration file ထဲ၌၎င်းကို server configuration file ထဲတွင်သတ်မှတ်ရန်လိုအပ်သည် ။
<span><span><span class="hljs-section">[mysqld]</span></span><span>
</span><span><span class="hljs-attr">local_infile</span></span><span>=</span><span><span class="hljs-number">1</span></span><span>
</span></span> MySQLI.allow_local_infile ကို PHP Configuration တွင်ဖွင့်ထားသည်။
Php.ini တွင်အောက်ပါပါ 0 င်သည်ကိုစစ်ဆေးပါ။
<span><span><span class="hljs-attr">mysqli.allow_local_infile</span></span><span> = </span><span><span class="hljs-literal">On</span></span><span>
</span></span>ဒေတာဘေ့စ်ကိုချိတ်ဆက်သောအခါ MySQLI_CLITID_Local_Files option ကိုထည့်ပါ။
<span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_init</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">options</span></span><span>(MYSQLI_OPT_LOCAL_INFILE, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">real_connect</span></span><span>(</span><span><span class="hljs-string">"host"</span></span><span>, </span><span><span class="hljs-string">"user"</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-literal">null</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, MYSQLI_CLIENT_LOCAL_FILES);
</span></span>ဤလုပ်ဆောင်မှု၏လုပ်ဆောင်ချက်သည် local file content ကို MySQL သို့ကြားခံဖြင့်ပေးရန်ဖြစ်သည်။ CSV ဖိုင်ကိုဖတ်ရှုခြင်းဥပမာတစ်ခုမှာဤတွင်ဖြစ်သည်။
<span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">localInfileReader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$stream</span></span></span><span>, &</span><span><span class="hljs-variable">$buffer</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>)
{
</span><span><span class="hljs-built_in">static</span></span><span> </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'/path/to/data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
}
}
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
}
</span><span><span class="hljs-variable">$buffer</span></span><span> = </span><span><span class="hljs-variable">$data</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}
</span></span>Set_local_infile_Handler ကို မည်သို့အသုံးပြုရမည်ကိုပြသသည့်ဥပမာပြည့်စုံသောဥပမာတစ်ခုဖြစ်သည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_init</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">options</span></span><span>(MYSQLI_OPT_LOCAL_INFILE, </span><span><span class="hljs-literal">true</span></span><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__">real_connect</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'root'</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-literal">null</span></span><span>, </span><span><span class="hljs-literal">null</span></span><span>, MYSQLI_CLIENT_LOCAL_FILES)) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">'Connect Error ('</span></span><span> . </span><span><span class="hljs-title function_ invoke__">mysqli_connect_errno</span></span><span>() . </span><span><span class="hljs-string">') '</span></span><span> . </span><span><span class="hljs-title function_ invoke__">mysqli_connect_error</span></span><span>());
}
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">localInfileReader</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$stream</span></span></span><span>, &</span><span><span class="hljs-variable">$buffer</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>)
{
</span><span><span class="hljs-built_in">static</span></span><span> </span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'/path/to/data.csv'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$fp</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
}
}
</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>, </span><span><span class="hljs-variable">$buflen</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$data</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> -</span><span><span class="hljs-number">1</span></span><span>;
}
</span><span><span class="hljs-variable">$buffer</span></span><span> = </span><span><span class="hljs-variable">$data</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span><span><span class="hljs-variable">$fp</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
}
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}
</span><span><span class="hljs-comment">// ဖတ်ပါပရိုဆက်ဆာကို set up</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>(</span><span><span class="hljs-string">"localInfileReader"</span></span><span>);
</span><span><span class="hljs-comment">// သွင်းကုန်ကြေညာချက်ကို execute</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"LOAD DATA LOCAL INFILE 'dummy.csv' INTO TABLE my_table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n'"</span></span><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">"သွင်းကုန်မအောင်မြင်ပါ: ("</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->errno . </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-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-comment">// Processor ကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_local_infile_default</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>ဥပမာ -
Dummy.csv သည် placeholder file name တစ်ခုဖြစ်ပြီး MySQL သည်လမ်းကြောင်းကိုအမှန်တကယ်မဖတ်ပါ, သို့သော်သင်ပေးသည့် callback function ကိုမူတည်သည်။
Callback function အတွင်းရှိတကယ့်ဖိုင်လမ်းကြောင်းသည်တရားဝင်ဖတ်နိုင်သောလမ်းကြောင်းဖြစ်နိုင်သည်။
callback function ကိုစဉ်ဆက်မပြတ်ဖတ်ရှုနိုင်ပြီးဒေတာအရှည်ကိုမှန်ကန်စွာပြန်ပို့နိုင်ရမည်။
နောက်ဆက်တွဲစစ်ဆင်ရေးအတွက်အမှားအစပျိုးခြင်းကိုရှောင်ရှားရန် callback ( set_local_infile_default () ) ကိုပိတ်ရန်သေချာပါစေ။
ကျေးဇူးပြု. ဒေတာဘေ့စ်အသုံးပြုသူသည် ဝန်အချက်အလက်ဒေသတွင်း မသုံးရမီလုံလောက်သောခွင့်ပြုချက်ရှိကြောင်းသေချာအောင်လုပ်ပါ။
set_local_infile_handler () နည်းလမ်းဖြင့် PHP သည် load data local infile အတွက် PHP သည်ပိုမိုလုံခြုံသောနှင့်ထိန်းချုပ်နိုင်သောအထောက်အပံ့နည်းလမ်းကိုပေးသည်။ ဤနည်းလမ်းသည်ဒေတာထည့်သွင်းရန်အတွက်တင်းကြပ်စွာစစ်ဆေးရန်လိုအပ်ချက်ရှိသည့်အခြေအနေများအတွက်အထူးသင့်တော်သည်။ ၎င်းသည်အလွန်အမင်းရှုပ်ထွေးသော်လည်း၎င်းသည်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင် developer များကိုတန်ဖိုးရှိသောပြောင်းလွယ်ပြင်လွယ်မှုနှင့်လုံခြုံမှုရှိစေသည်။
ဤနည်းစနစ်ကိုကျွမ်းကျင်ခြင်းသည်သင်၏အကြီးစားဒေတာသွင်းကုန်လုပ်ငန်းများကိုကိုင်တွယ်ရန်သင့်အားအစွမ်းထက်သောကိရိယာများကိုထည့်သွင်းပေးလိမ့်မည်။
သက်ဆိုင်သောတက်(ဂ်)များ:
MySQL