php实现大批量入库实战

      发布在:后端技术      评论:0 条评论
<p>php实现大批量入库实战,前几年写的,现在看看也是有参考价值的,这块也考虑到了数据重复的处理方式</p><pre style="background-color:#262e37;color:#ffffff;font-family:&#39;Consolas&#39;,monospace;font-size:11.3pt;"> $file <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">fopen</span>(<span style="color:#e6db74;">&#39;.&#39;</span><span style="color:#f92672;">.</span>$upload_result[<span style="color:#e6db74;">&#39;data&#39;</span>][<span style="color:#ae81ff;">0</span>][<span style="color:#e6db74;">&#39;url&#39;</span>], <span style="color:#e6db74;">&quot;r&quot;</span>);<br/> $aid<span style="color:#f92672;">=</span><span style="color:#a6e22e;">session</span>(<span style="color:#a6e22e;">C</span>(<span style="color:#e6db74;">&#39;USER_AUTH_KEY&#39;</span>));<br/><span style="color:#66837f;background-color:#191f26;">//</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">输出文本中所有的行,直到文件结束为止。</span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>$k<span style="color:#f92672;">=</span><span style="color:#ae81ff;">0</span>;<br/> $ins_str<span style="color:#f92672;">=</span><span style="color:#e6db74;">&#39;&#39;</span>;<br/> <span style="color:#f92672;">while</span>(<span style="color:#f92672;">! </span><span style="color:#66d9ef;font-style:italic;">feof</span>($file))<br/> {<br/> $vo<span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">fgets</span>($file);<span style="color:#66837f;background-color:#191f26;">//fgets()</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">函数从文件指针中读取一行</span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>$v<span style="color:#f92672;">=</span><span style="color:#66d9ef;font-style:italic;">explode</span>(<span style="color:#e6db74;">&#39;-&#39;</span>,$vo);<br/> <span style="color:#f92672;">if</span>(<span style="color:#f92672;">!empty</span>($v[<span style="color:#ae81ff;">0</span>])){<br/> $prod[<span style="color:#e6db74;">&#39;title&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">trim</span>($v[<span style="color:#ae81ff;">0</span>]);<br/> <span style="color:#66837f;background-color:#191f26;">//15</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">是父栏目</span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color:#f92672;">if</span>($cid<span style="color:#f92672;">==</span><span style="color:#ae81ff;">15</span>){<br/> $cid<span style="color:#f92672;">=</span><span style="color:#66d9ef;font-style:italic;">strlen</span>($prod[<span style="color:#e6db74;">&#39;title&#39;</span>])<span style="color:#f92672;">-</span><span style="color:#ae81ff;">4</span>;<br/> $cid<span style="color:#f92672;">=</span><span style="color:#66d9ef;font-style:italic;">min</span>($cid,<span style="color:#ae81ff;">6</span>);<br/> }<br/> <span style="color:#66837f;background-color:#191f26;">//2064897854-40</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">级</span><span style="color:#66837f;background-color:#191f26;">-350</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">元</span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>$prod[<span style="color:#e6db74;">&#39;price&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">intval</span>(<span style="color:#66d9ef;font-style:italic;">trim</span>($v[<span style="color:#ae81ff;">2</span>]));<br/> $prod[<span style="color:#e6db74;">&#39;level&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">intval</span>(<span style="color:#66d9ef;font-style:italic;">trim</span>($v[<span style="color:#ae81ff;">1</span>]));<br/> $prod[<span style="color:#e6db74;">&#39;mibao&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">intval</span>(<span style="color:#66d9ef;font-style:italic;">trim</span>($mibao));<br/> $prod[<span style="color:#e6db74;">&#39;isvip&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">intval</span>(<span style="color:#66d9ef;font-style:italic;">trim</span>($isvip));<br/> $prod[<span style="color:#e6db74;">&#39;cid&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">trim</span>($cid);<br/> $prod[<span style="color:#e6db74;">&#39;status&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#ae81ff;">1</span>;<br/> $prod[<span style="color:#e6db74;">&#39;publishtime&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">time</span>();<br/> $prod[<span style="color:#e6db74;">&#39;updatetime&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">time</span>();<br/> $prod[<span style="color:#e6db74;">&#39;addtime&#39;</span>] <span style="color:#f92672;">= </span><span style="color:#66d9ef;font-style:italic;">date</span>(<span style="color:#e6db74;">&quot;Y-m-d H:i:s&quot;</span>,<span style="color:#66d9ef;font-style:italic;">time</span>());<br/> $prod[<span style="color:#e6db74;">&#39;aid&#39;</span>] <span style="color:#f92672;">= </span>$aid;<br/> $prod[<span style="color:#e6db74;">&#39;filename&#39;</span>] <span style="color:#f92672;">= </span>$filename;<br/> <span style="color:#66837f;background-color:#191f26;">//insert into __YMPRODUCT__ (title,price,level,mibao,isvip,cid,status,publishtime,updatetime,addtime,aid,filename) values ($prod[&#39;title&#39;],$prod[&#39;price&#39;],$prod[&#39;level&#39;],$prod[&#39;mibao&#39;],$prod[&#39;isvip&#39;],$prod[&#39;cid&#39;],$prod[&#39;status&#39;],$prod[&#39;publishtime&#39;],$prod[&#39;updatetime&#39;],$prod[&#39;addtime&#39;],$prod[&#39;aid&#39;],$prod[&#39;filename&#39;]) on duplicate key update price=values(price);</span><span style="color:#66837f;"><br/></span><span style="color:#66837f;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>$k<span style="color:#f92672;">++</span>;<br/> <span style="color:#f92672;">if</span>($ins_str <span style="color:#f92672;">!= </span><span style="color:#e6db74;">&#39;&#39;</span>){<br/> $ins_str<span style="color:#f92672;">.=</span><span style="color:#e6db74;">&#39;,&#39;</span>;<br/> }<br/> $ins_str<span style="color:#f92672;">.=</span><span style="color:#e6db74;">&quot;(&#39;</span>{$prod[<span style="color:#e6db74;">&#39;title&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;price&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;level&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;mibao&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;isvip&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;cid&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;status&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;publishtime&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;updatetime&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;addtime&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;aid&#39;</span>]}<span style="color:#e6db74;">&#39;,&#39;</span>{$prod[<span style="color:#e6db74;">&#39;filename&#39;</span>]}<span style="color:#e6db74;">&#39;)&quot;</span>;<br/> <span style="color:#f92672;">if</span>($k<span style="color:#f92672;">&gt;</span><span style="color:#ae81ff;">1000</span>){<br/><span style="color:#66837f;background-color:#191f26;">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sql</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">拼接长度受</span><span style="color:#66837f;background-color:#191f26;">max_allowed_packet</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">的值影响,值越大可拼接长度可越长,当然一次性可插入的数据就越大(个人未验证,但</span><span style="color:#66837f;background-color:#191f26;">sql</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">语句的最大长度肯定说</span><span style="color:#66837f;background-color:#191f26;">sql</span><span style="color:#66837f;background-color:#191f26;font-family:&#39;宋体&#39;,monospace;">数据库配置的影响)</span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"><br/></span><span style="color:#66837f;font-family:&#39;宋体&#39;,monospace;"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>$sql<span style="color:#f92672;">=</span><span style="color:#e6db74;">&#39;insert into __PRODUCT__ (title,price,level,mibao,isvip,cid,status,publishtime,updatetime,addtime,aid,filename) values &#39;</span><span style="color:#f92672;">.</span>$ins_str<span style="color:#f92672;">.</span><span style="color:#e6db74;">&#39; on duplicate key update price=</span><span style="color:#66d9ef;font-style:italic;">IF</span><span style="color:#e6db74;">(price &lt; </span><span style="color:#66d9ef;font-style:italic;">VALUES</span><span style="color:#e6db74;">(price), </span><span style="color:#66d9ef;font-style:italic;">VALUES</span><span style="color:#e6db74;">(price), price)&#39;</span>;<br/> $Mprod<span style="color:#f92672;">-&gt;</span><span style="color:#a6e22e;">execute</span>($sql);<br/> $ins_str<span style="color:#f92672;">=</span><span style="color:#e6db74;">&#39;&#39;</span>;<br/> $k<span style="color:#f92672;">=</span><span style="color:#ae81ff;">0</span>;<br/> }<br/><br/><br/> }<br/><br/> }<br/> <span style="color:#66d9ef;font-style:italic;">fclose</span>($file);<br/> <span style="color:#f92672;">if</span>($ins_str <span style="color:#f92672;">!= </span><span style="color:#e6db74;">&#39;&#39;</span>){<br/> $sql<span style="color:#f92672;">=</span><span style="color:#e6db74;">&#39;insert into __PRODUCT__ (title,price,level,mibao,isvip,cid,status,publishtime,updatetime,addtime,aid,filename) values &#39;</span><span style="color:#f92672;">.</span>$ins_str<span style="color:#f92672;">.</span><span style="color:#e6db74;">&#39; on duplicate key update price=</span><span style="color:#66d9ef;font-style:italic;">IF</span><span style="color:#e6db74;">(price &lt; </span><span style="color:#66d9ef;font-style:italic;">VALUES</span><span style="color:#e6db74;">(price), </span><span style="color:#66d9ef;font-style:italic;">VALUES</span><span style="color:#e6db74;">(price), price)&#39;</span>;<br/> $Mprod<span style="color:#f92672;">-&gt;</span><span style="color:#a6e22e;">execute</span>($sql);<br/> }<br/> <span style="color:#f92672;">exit</span>(<span style="color:#e6db74;">&#39;{&quot;error&quot;:0,&quot;info&quot;:&quot;</span><span style="color:#e6db74;font-family:&#39;宋体&#39;,monospace;">入库成功</span><span style="color:#e6db74;">&quot;}&#39;</span>);</pre><p><br/></p>
相关文章
热门推荐