2015-09-03 58 views
1

我試圖將多個文本文件的內容傳輸到MySQL中。這些文件依次命名爲1.txt2.txt,3.txt ... 13381.txt。基本上,每個文件都是一個沒有所有標題,元等的HTML文檔,它們已被剝離,只剩下內容。使用PHP將多個文本文件導入數據庫表格單元格

我也製作了一張表,其中列IDCONTENTID是自動遞增的。我想這些文件的內容進入CONTENT列的單元格是這樣的:

1.txt -> row 1 
2.txt -> row 2 
3.txt -> row 3 
etc. 

搜索周圍只會導致我從CSV並在數據的其他表格形式導入數據。我總是可以打開每個文件,並從那裏複製粘貼到像phpmyadmin這樣的東西,但這似乎是一個乏味的事情,因爲有成千上萬的數據文件需要通過。

我想知道是否有一個簡單的方法來使用PHP和一些獲取文件內容然後更新數據庫的遞歸循環。我已經嘗試了一下,但是我似乎超出了我平庸的編程技能。任何人都在意幫忙嗎?感謝提前:)

回答

2

像這樣使用PDO ...

<?php 
$host = 'localhost'; $db = 'database-name'; $user = 'database-user-name'; $pw = 'database-password'; 
$conn = new PDO('mysql:host='.$host.';dbname='.$db.';charset=utf8', $user, $pw); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$i = 0; 
do { 
    $i = $i+1; 
    $txt = file_get_contents("$i.txt"); 

try { 
    $sql = "INSERT INTO table (CONTENT) VALUES (:txt)"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindValue(':txt', $txt, PDO::PARAM_STR); 
    $stmt->execute(); 
} catch (PDOException $e) { 
    die("Could not complete the insert for ".$i.".txt " . $e->getMessage()); // this will tell you which of your text files caused the error 
} 

} while ($i <= 13381); // close for loop 

echo('All Done!'); 
?> 

希望這有助於。

+0

嗨!我嘗試了這一點,並獲得錯誤「致命錯誤:調用一個非對象的成員函數prepare()」$ stmt = $ conn-> prepare($ sql);''。我忘了更換一些東西嗎?謝謝 – doraemond

+0

可能是您的連接文件或數據庫連接代碼。這應該放在你的插入代碼之上。看到我編輯的答案 – Kuya

+0

明白了,謝謝!這可能需要一段時間才能完成,但是這種方法有什麼缺陷嗎?像內存使用或執行時間限制一樣? 此外,我甚至不知道你可以使用你的方法連接到SQL。我只是通常使用'mysql_connect()'。 – doraemond

0
<?php 
    try { 
     $instance = new PDO("mysql:host=127.0.0.1;dbname=nameofdatabase;charset=utf8", $user, $pass, array(PDO::ATTR_PERSISTENT => true)); 
     $instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $instance->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 


    $stmt = $instance->prepare('INSERT INTO tablename SET CONTENT=:con'); 

    for ($i = 1; $i <= 13381; $i++) 
    { 
    $con = file_get_contents("/path/to/files_dir/$i.txt"); 
    $stmt->bindValue(':con', $con, PDO::PARAM_STR); 
    $stmt->execute(); 
    } 
} 
    catch(PDOException $ecx) {} 

OR 可以使用mysqlLOAD DATA INFILE聲明php循環

+0

你爲什麼推薦使用不推薦使用的代碼? [mysql已自PHPv5.5棄用](http://php.net/manual/en/changelog.mysql.php) – Kuya

+0

我在哪裏推薦不推薦使用的代碼? – anonymous

相關問題