Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Txt文件中检索数据并保存到数据库中_Php_Mysql - Fatal编程技术网

Php 从Txt文件中检索数据并保存到数据库中

Php 从Txt文件中检索数据并保存到数据库中,php,mysql,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","a

我有一个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);
?>

此代码仅保存第1行。

简单如下:

$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));
}

您应该尝试以下方法:

while (!feof($fh)) {
   $line = fgets($fh);
   mysqli_query($con,"INSERT INTO Persons (ID)
        VALUES ('".$line."')");
}
循环遍历文件的每一行,然后将其插入数据库


这不是最有效的方法,尤其是当你有大量的行时,但它确实起到了作用。如果你有很多行,那么你应该尝试在一次插入中完成所有操作。

这个问题有两种可能:

第一个只是使用SplFileObject解析文件

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

第二个是使用MySQL的加载数据填充功能


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

我将首先回答您的问题。您的代码在其当前状态下很好,但问题是只读取了一行。如果要读取完整的文件内容,必须循环每一行。更改代码以包含while循环,如下所示:

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

while(!feof($fh)){
    $theData = fgets($fh);
    echo $theData; //save it to DB
}
检查文件指针上的文件结尾。如果达到EOF(文件结束),它将退出循环


替代解决方案:

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

示例:

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

使用
加载数据填充
的优点是,它比其他方法快得多,但速度可能会因其他因素而异。

您真的需要PHP脚本吗?因为mysql也可以通过一个请求来实现这一点,请告诉我如何实现。。或者,我认为你在代码中遗漏了一些东西。您可以给他的第一个建议是,他没有测试文件是否存在。另一个原因是这种方法对性能有影响,因为在解析文件时需要打开连接以秒为单位添加所有行,单位为db!thanks@DavidLevel,在我看来,你和其他回答这个问题的人都想得太多了。除了我提供的内容之外,他没有要求任何其他内容,这是一种将文件内容放入数据库的简单方法。按照你的思路,你可以写一本关于如何在数据库中插入3行的小书。我知道这一点,但你不能给他留下唯一的解决方案,这一个在PHP文档中,这意味着他可以很容易地找到他自己。如果有人在这个网站上要求一个解决方案,我想他尝试了一切,想要一个更好的解决方案。但你的一个当然有效