2015-09-03 63 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

相关问题