溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

使用PHP怎么將讀取的TXT文件導(dǎo)入數(shù)據(jù)庫(kù)

發(fā)布時(shí)間:2021-03-05 15:02:20 來(lái)源:億速云 閱讀:376 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

今天就跟大家聊聊有關(guān)使用PHP怎么將讀取的TXT文件導(dǎo)入數(shù)據(jù)庫(kù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

php有什么用

php是一個(gè)嵌套的縮寫(xiě)名稱(chēng),是英文超級(jí)文本預(yù)處理語(yǔ)言,它的語(yǔ)法混合了C、Java、Perl以及php自創(chuàng)新的語(yǔ)法,主要用來(lái)做網(wǎng)站開(kāi)發(fā),許多小型網(wǎng)站都用php開(kāi)發(fā),因?yàn)閜hp是開(kāi)源的,從而使得php經(jīng)久不衰。

有一個(gè)TXT文件,包含了10萬(wàn)條記錄,格式如下:

列1       列2       列3   列4   列5
a    00003131    0    0    adductive#1 adducting#1 adducent#1
a    00003356    0    0    nascent#1
a    00003553    0    0    emerging#2 emergent#2
a    00003700    0.25    0    dissilient#1

……………………后面有10萬(wàn)條………………

需求是要導(dǎo)入數(shù)據(jù)庫(kù)中,數(shù)據(jù)表的結(jié)構(gòu)為

word_id   自動(dòng)增量
word     【adductive#1 adducting#1 adducent#1】這一個(gè)TXT記錄要轉(zhuǎn)換為3個(gè)SQL記錄
value     =第三列-第四列;如果=0,則此條記錄略過(guò)不插入數(shù)據(jù)表

復(fù)制代碼 代碼如下:


<?php
    $file = 'words.txt';//10W條記錄的TXT源文件
    $lines = file_get_contents($file);
    ini_set('memory_limit', '-1');//不要限制Mem大小,否則會(huì)報(bào)錯(cuò)
    $line=explode("\n",$lines);
    $i=0;
    $sql="INSERT INTO words_sentiment (word,senti_type,senti_value,word_type) VALUES ";

    foreach($line as $key =>$li)
    {
        $arr=explode(" ",$li);
        $senti_value=$arr[2]-$arr[3];
        if($senti_value!=0)
        {
            if($i>=20000&&$i<25000)//分批次導(dǎo)入,避免失敗
            {
             $mm=explode(" ",$arr[4]);               
                 foreach($mm as $m)   //【adductive#1 adducting#1 adducent#1】這一個(gè)TXT記錄要轉(zhuǎn)換為3個(gè)SQL記錄                 {
                     $nn=explode("#",$m);
                     $word=$nn[0];
                     $sql.="(\"$word\",1,$senti_value,2),";//這個(gè)地方要注意到是 word有可能包含單引號(hào)(如jack's),因此我們要用雙引號(hào)來(lái)包含word(注意轉(zhuǎn)義)                      
                 }
            }
   $i++;
        }        
    }
    //echo $i;
    $sql=substr($sql,0,-1);//去掉最后一個(gè)逗號(hào)
    //echo $sql;
    file_put_contents('20000-25000.txt', $sql);  //批量導(dǎo)入數(shù)據(jù)庫(kù),5000條一次,大概需要40秒的樣子;一次導(dǎo)入太多max_execution_time會(huì)不夠,導(dǎo)致失敗    
?>


1,海量數(shù)據(jù)導(dǎo)入到時(shí)候,要注意PHP的一些限制,可以臨時(shí)調(diào)整一下,否則會(huì)報(bào)錯(cuò)

Allowed memory size of 33554432 bytes exhausted (tried to allocate 16 bytes)

2,PHP操作TXT文件

file_get_contents()

file_put_contents()

3,海量導(dǎo)入的時(shí)候,最好分批次導(dǎo)入,失敗的幾率小一些

4,海量導(dǎo)入之前,腳本一定要多次測(cè)試無(wú)誤再使用,比如用100條數(shù)據(jù)來(lái)測(cè)試

5,導(dǎo)入之后,如果PHP的mem_limit還是不夠的話(huà),程序仍然跑不起來(lái)

看完上述內(nèi)容,你們對(duì)使用PHP怎么將讀取的TXT文件導(dǎo)入數(shù)據(jù)庫(kù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI