歡迎加入PHP技術交流QQ羣 370648191、201923866
今天遇到mysql佔位符的問題。
問題背景是: 在做一個自己用的股票分析系統的時候,採集單隻股票數據,可指定採集時間區間。採集完成後,一次性插入數據庫。
題外話開始
(一些經驗欠缺的,可能會foreach一個一個插入,這是不對的,嚴重影響程序性能!!!你們可要長點心)
題外話結束
本來用得好好的。某次採集平安的時候,報“General error: 1390 Prepared statement contains too many placeholders”。
平安上市很早,數據條目多,所以導致這個"bug"的浮現
如下圖:
經瞭解,Mysql默認支持的佔位符最多爲65535(2^16-1)個,寫入數據爲m列,n行。m*n必須小於65535
所以,我們插入的時候,需把數據切割,分N次插入即可。
比如我使用array_chunk,每1000條數據插入一次
//$list可能有上萬個數組,
$chunk_result = array_chunk($list, 1000);
//我這裏的預計只有1~3次循環,個別的股票需要循環2次或3次。注意不要有幾十次幾百次的循環出現,場景不一樣請使用其他方法!!
foreach($chunk_result as $new_list){
//此處批量插入數據操作
}
歡迎關注我的個人公衆號,沒有毒雞湯,讓我們交流深夜的姿勢(打代碼的姿勢)
歡迎加我微信,發送csdn,拉你進PHP技術交流羣
2019.04