我有一个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);
>
此守则只是保存第一行..
答案 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 '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功能如果您不需要使用文件中的数据而只是存储它们,这是一种很好的方法。