从文本文件中检索数据并将其保存在数据库中

时间:2013-07-19 13:57:39

标签: php mysql

我有一个txt文件中的数据我想将它保存在数据库中

mytxtfile

xxxxxxxxx
xxxxxxxxx
xxxxxxxxx

我想在数据库中保存每一行......

我想创建一个PHP文件,它从txt文件中获取第一行并将其保存在db中。然后再次第二行等等....

myphpcode

$myFile = "data.txt";
$fh = fopen($myFile, 'r');
$theData = fgets($fh);

$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
 {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }

mysqli_query($con,"INSERT INTO Persons (ID)
VALUES (''.$theData.'')");

mysqli_close($con);

>

此守则只是保存第一行..

4 个答案:

答案 0 :(得分:1)

我会先回答你的问题。你的代码在它的当前条件下是好的,但问题只是读取一行。如果要阅读完整的文件内容,则必须遍历每一行。将代码更改为包含while循环,如下所示:

$fh = fopen('file.txt', 'r');

while(!feof($fh)){
    $theData = fgets($fh);
    echo $theData; //save it to DB
}

feof()检查文件指针上的文件结尾。如果达到EOF(文件结束),它将退出循环。


替代解决方案:

使用LOAD DATA INFILE

示例:

LOAD DATA INFILE 'data.txt' INTO TABLE Persons
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
  IGNORE 1 LINES;

使用LOAD DATA INFILE的优势在于它比其他方法快得多,但速度可能因其他因素而异。

答案 1 :(得分:0)

它很简单:

$ip     = fopen('data.txt', "r");

$line = trim(fgets($ip));
while(!feof($ip)){
  // do something with line in $line
  //....
  // reading next line
  $line = trim(fgets($ip));
}

答案 2 :(得分:0)

你应该尝试类似的东西:

while (!feof($fh)) {
   $line = fgets($fh);
   mysqli_query($con,"INSERT INTO Persons (ID)
        VALUES ('".$line."')");
}

循环遍历文件的每一行,然后将其插入数据库。

这不是最有效的方式,特别是如果你有很多行,但它可以解决问题。如果你确实拥有很多行,那么你应该尝试在一个INSERT中执行所有操作。

答案 3 :(得分:0)

这个问题的两种可能性:

首先使用SplFileObject http://php.net/manual/fr/class.splfileobject.php

解析文件

在我看来,使用Spl对象总是一种很好的PHP编码方式。

第二个包括使用MySQL http://dev.mysql.com/doc/refman/5.6/en/load-data.html

的LOAD DATA INFILE功能

如果您不需要使用文件中的数据而只是存储它们,这是一种很好的方法。