3

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

我的txt文件

xxxxxxxxx
xxxxxxxxx
xxxxxxxxx

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

我想制作一个 PHP 文件,它从 txt 文件中获取第一行并将其保存在 db 中。然后又是第二行,依此类推....

我的PHP代码

$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

4 回答 4

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是它比其他方法快得多,但速度可能会因其他因素而异。

于 2013-07-19T14:14:55.997 回答
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));
}
于 2013-07-19T14:02:32.873 回答
0

您应该尝试以下方法:

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

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

这不是最有效的方法,尤其是当你有大量的行时,但它可以解决问题。如果您确实有很多行,那么您应该尝试在一个 INSERT 中完成所有操作。

于 2013-07-19T14:03:18.137 回答
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 功能

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

于 2013-07-19T14:07:15.023 回答