General error: 1390 Prepared statement contains too many placeholders

歡迎加入PHP技術交流QQ羣 370648191、201923866

 

今天遇到mysql佔位符的問題。

問題背景是: 在做一個自己用的股票分析系統的時候,採集單隻股票數據,可指定採集時間區間。採集完成後,一次性插入數據庫。

 

題外話開始

(一些經驗欠缺的,可能會foreach一個一個插入,這是不對的,嚴重影響程序性能!!!你們可要長點心)

點心
點心

 題外話結束

 

 本來用得好好的。某次採集平安的時候,報“General error: 1390 Prepared statement contains too many placeholders”。

平安上市很早,數據條目多,所以導致這個"bug"的浮現

如下圖:

General error: 1390 Prepared statement contains too many placeholders
General error: 1390 Prepared statement contains too many placeholders

 

經瞭解,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技術交流羣

 

 

 

Yoper

2019.04

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章