MySQLI_STMT :: Send_long_data ကို ကြေငြာချက်မချခင်ဖုန်းဆက်ရမည်။ အကယ်. သင်သည် Send_long_Data ကို အသုံးပြုရန်ကြိုးစားပါက () ကိုခေါ်ဆိုခြင်း () , အမှားတစ်ခုဖြစ်ပေါ်လိမ့်မည်။ ဘုံအမှားမက်ဆေ့ခ်ျများမှာ -
သတိပေးချက် - MySQLI_STMT :: Send_long_data () Parameter 1 သည် parameter 1 ကိုအရင်းအမြစ်ဖြစ်ရန်မျှော်လင့်သည်။
ဤအမှားသည် SQL_DATA ဟုခေါ်သောအခါ SQL ကြေငြာချက်ကိုလက်ကိုင်ရန်လက်ကိုင်ကိုစနစ်တကျပြင်ဆင်ခြင်းမဟုတ်ပါ။
ဖြေရှင်းချက် <br> SEST_LONG_DATA ကို SQL ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်ခြင်းမပြုမီကြာရှည်စွာသွားရန်သေချာအောင်လုပ်ပါ။ မှန်ကန်သောအမိန့်ဖြစ်သင့်သည် -
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$largeData</span></span><span>); </span><span><span class="hljs-comment">// Big Data ကိုပို့ပါ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>(); </span><span><span class="hljs-comment">// Execution ကြေငြာချက်</span></span><span>
</span></span> ပြနာဖော်ပြချက်
Send_long_data သည် မှန်ကန်စွာသတ်မှတ်ရန် parameter သည်အညွှန်းကိန်းလိုအပ်သည်။ ဥပမာအားဖြင့်, SQL ကြေငြာချက်တွင် Placeollers များစွာရှိပါကမှန်ကန်သော parameter သည်အညွှန်းကိန်းကိုဖြတ်သန်းရမည်။
သတိပေးချက် - MySQLI_STMT :: Send_long_data () Parameter 1 သည် parameter 1 ကိုအရင်းအမြစ်ဖြစ်ရန်မျှော်လင့်သည်။
မှန်ကန်သောအညွှန်းကိန်းမသတ်မှတ်သည့်အခါဤအမှားသည်များသောအားဖြင့် PHP ကိုဒေတာများကိုမှန်ကန်စွာရှာဖွေရန်ပျက်ကွက်သည်။
ဖြေရှင်းချက် <br> Send_long_data တွင်အညွှန်းကိန်းကိုမှန်ကန်စွာသတ်မှတ်ထားကြောင်းသေချာပါစေ။ အညွှန်းကိန်းသည်များသောအားဖြင့် 0 တွင် 0 သည် 0 င်တွင်စတင်သည်။ ဥပမာအားဖြင့်:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$largeData</span></span><span>); </span><span><span class="hljs-comment">// ပထမနေရာအတွက်ရှည်လျားသောဒေတာများကိုမှန်ကန်စွာဖြတ်သန်းပါ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span> ပြနာဖော်ပြချက်
MySQLI_STMT :: Send_long_data ကို ကြီးမားသောအချက်အလက်များကိုလုပ်ဆောင်ရန်အသုံးပြုသည်။ သို့သော်ဒေတာများသည် MySQL configuration တွင်သတ်မှတ်ထားသောအများဆုံးဒေတာအရွယ်အစားထက်ကျော်လွန်ပါက၎င်းသည်ဂီယာပျက်ကွက်မှုဖြစ်စေလိမ့်မည်။ ၎င်းသည်များသောအားဖြင့်အမှားအယွင်းတစ်ခုအဖြစ်ပြသသည်။
MySQL အမှား - ဒေတာများကိုကော်လံများစွာကြာသည်။
ဤအမှားသည်များသောအားဖြင့် max_allowed_packet parameter နှင့်သက်ဆိုင်သည်။ MySQL configuration file တစ်ခုတွင်အမြင့်ဆုံး packet အရွယ်အစားကိုထိန်းချုပ်သော MySQL configuration file တွင်ရွေးချယ်စရာဖြစ်သည်။
ဖြေရှင်းချက် <br> ဤပြ issue နာကိုဖြေရှင်းရန် MySQL configuration file ရှိ Max_allowed_packet parameter ကိုစစ်ဆေးရန်နှင့်ချိန်ညှိရန်လိုအပ်သည်။ လက်ရှိ configuration ကိုအောက်ပါ command မှတဆင့်ကြည့်ရှုနိုင်သည်။
<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">'max_allowed_packet'</span></span><span>;
</span></span>အကယ်. လက်ရှိတန်ဖိုးသည်ငယ်ပါကဤ parameter ၏တန်ဖိုးကို My.cnf သို့မဟုတ် My.ini ဖိုင်သို့ကျွန်ုပ်၏တန်ဖိုးကိုထည့်ပြီး MySQL ဝန်ဆောင်မှုကိုပြန်လည်စတင်နိုင်သည်။
<span><span><span class="hljs-attr">max_allowed_packet</span></span><span> = </span><span><span class="hljs-number">64</span></span><span>M
</span></span> ပြနာဖော်ပြချက်
Send_long_data ကို ရှည်လျားသောအချက်အလက်များကိုပို့ရန်အသုံးပြုသောအခါ SQL ကြေငြာချက်တွင် placeholder အမျိုးအစားနှင့်ကိုက်ညီမှုရှိစေရန်လိုအပ်ကြောင်းသေချာစေရန်လိုအပ်သည်။ ဥပမာအားဖြင့်, placeholder type သည် Blob ဖြစ်ပါက Passed Data သည် binary data ဖြစ်ရမည်။
ဒေတာအမျိုးအစားများမကိုက်ညီပါကအမှားတစ်ခုဖြစ်ပေါ်စေနိုင်သည်။
သတိပေးချက် - MySQLI_STMT :: Send_long_data () Parameter 2 သည် string ကို string ကိုပေးရန်မျှော်လင့်သည်။
ဖြေရှင်းချက် <br> Passed data type သည် SQL ကြေငြာချက်တွင် placeholder type နှင့်ကိုက်ညီကြောင်းသေချာပါစေ။ placeholder type သည် string ( များ ) ဖြစ်ပါကအချက်အလက်သည်ကြိုးတစ်ချောင်းဖြစ်သင့်သည်။ အကယ်. ၎င်းသည် binary data ( ခ ) ဖြစ်ပါကအချက်အလက်သည် binary format ဖြင့်ပြုလုပ်သင့်သည်။
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (file_content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"b"</span></span><span>, </span><span><span class="hljs-variable">$binaryData</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$binaryData</span></span><span>); </span><span><span class="hljs-comment">// binary ဒေတာကိုပို့ပါ</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span> ပြနာဖော်ပြချက်
Send_long_Data သည် တက်ကြွသောဒေတာဘေ့စ် connection ကိုဆက်ထိန်းထားရန်လိုအပ်သည်။ အမှားသတင်းစကားဖြစ်နိုင်သည်
ချို့ယွင်းချက် - စုံစမ်းမှုစဉ်အတွင်း MySQL server သို့ဆက်သွယ်မှုပျောက်ဆုံးခြင်း။
ဒေတာဘေ့စ်ကိုအချိန်ကြာမြင့်စွာလည်ပတ်နိုင်ခြင်းမရှိပါကဤပြ problem နာသည်များသောအားဖြင့်ဖြစ်လေ့ရှိသည်။
ဖြေရှင်းချက် <br> ဆက်သွယ်မှုအချိန်ကုန်များကိုရှောင်ရှားရန်စစ်ဆင်ရေးအတွင်းဒေတာဘေ့စ်ဆက်သွယ်မှုသည်ဆက်လက်တည်ရှိစေရန်သေချာစေပါ။ အကယ်. ဒေတာလွှဲပြောင်းအချိန်သည်ကြာရှည်ပါက PHP's Max_execution_time_time ကိုချိန် ညှိခြင်းဖြင့်အချိန်ကိုသင်ရှောင်ရှားနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'max_execution_time'</span></span><span>, </span><span><span class="hljs-number">300</span></span><span>); </span><span><span class="hljs-comment">// PHP အများဆုံးကွပ်မျက်အချိန် 5 မိနစ်</span></span><span>
</span></span>တစ်ချိန်တည်းမှာပင်အချက်အလက်အမြောက်အများကိုတစ်ပြိုင်နက်တည်းပေးပို့ခြင်းနှင့်ဆက်သွယ်မှုဆုံးရှုံးမှုများကိုဖြစ်ပေါ်စေခြင်းမှရှောင်ရှားရန်အချက်အလက်အမြောက်အများကိုပေးပို့သည့်အခါအသုတ်တွင်ပြုပြင်ထုတ်လုပ်ရန်စဉ်းစားရန်လည်းဖြစ်နိုင်သည်။
မေးခွန်းဖော်ပြချက် <br> <br> SQL ထုတ်ပြန်ချက်များကိုအကောင်အထည်ဖော်သည့်အခါ, parameters တွေကို binding parameters တွေကိုလုပ်တဲ့အခါအမှားတစ်ခုဖြစ်ပါက၎င်းသည် send_long_data ကို ကောင်းစွာအလုပ်မလုပ်စေရန်ဖြစ်စေနိုင်သည်။ ဥပမာအားဖြင့်, bind_param binding parameter သည်အသုံးပြုပါကအချက်အလက်များကိုအောင်မြင်စွာမအောင်မြင်ပါကပြ a နာတစ်ခုဖြစ်လိမ့်မည်။
ဖြေရှင်းချက် <br> SQL ထုတ်ပြန်ကြေငြာချက်ကိုမဖြန့်ချိမီသေချာစေခြင်း မပြု မီလိုအပ်သော parameterser အားလုံးကိုမှန်ကန်စွာချည်နှောင်ခြင်းနှင့်စည်းနှောင်ခြင်းသည်အောင်မြင်ကြောင်းအတည်ပြုရန်ပြန်လာတန်ဖိုးကိုစစ်ဆေးရန်သေချာပါစေ။
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</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-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$largeData</span></span><span>); </span><span><span class="hljs-comment">// binding parameters တွေကိုပြီးနောက်ဒေတာကိုပေးပို့ဖို့သေချာပါစေ</span></span><span>
}
</span></span>
သက်ဆိုင်သောတက်(ဂ်)များ:
mysqli_stmt