[英]Read a text file and transfer contents to mysql database
I need a php script to read a .txt file. 我需要一个PHP脚本来读取.txt文件。
The content of the text file are like this: 文本文件的内容如下:
data.txt data.txt中
145|Joe Blogs|17/03/1954
986|Jim Smith|12/01/1976
234|Paul Jones|19/07/1923
098|James Smith|12/09/1998
234|Carl Jones|01/01/1925
These would then get stored into a database like this 然后将这些存储到这样的数据库中
**DataID |Name |DOB ** ** DataID |名称| DOB **
234 |Carl Jones|01/01/1925
I would be so grateful if someone could give me script to achieve this. 如果有人能给我脚本来实现这一目标,我将非常感激。
<?
$handle = @fopen("data.txt", "r");
$conn = mysql_connect("localhost","username","password");
mysql_select_db("mydatabase",$conn);
while (!feof($handle)) // Loop til end of file.
{
$buffer = fgets($handle, 4096);
// Read a line.
list($a,$b,$c)=explode("|",$buffer);
//Separate string by the means of |
echo $a."-".$b."-".$c."<br>";
$sql = "INSERT INTO data_table (iddata, name, age) VALUES('".$a."','".$b."',".$c.")";
mysql_query($sql,$conn) or die(mysql_error());
}
?>
get the following error error in your SQL syntax; 在SQL语法中获取以下错误错误; ...for the right syntax to use near ')' at line 1
...在第1行使用')附近的正确语法
What you may be looking for is MySQL's built-in function LOAD DATA INFILE
to load a text file containing values for a database into a database. 您可能正在寻找的是MySQL的内置函数
LOAD DATA INFILE
,用于将包含数据库值的文本文件加载到数据库中。
The LOAD DATA INFILE statement reads rows from a text file into a table at a very high speed.
LOAD DATA INFILE语句以非常高的速度将文本文件中的行读入表中。 The file name must be given as a literal string.
文件名必须以文字字符串形式给出。
Example: 例:
LOAD DATA INFILE 'data.txt' INTO TABLE my_table;
You could also specify the delimiters inside of your text-file, like so: 您还可以在文本文件中指定分隔符,如下所示:
LOAD DATA INFILE 'data.txt' INTO TABLE my_table FIELDS TERMINATED BY '|';
Here is a full-working example, I uploaded a test data file here and here is my PHP code. 这是一个完整的例子,我在这里上传了一个测试数据文件,这里是我的PHP代码。
$string = file_get_contents("http://www.angelfire.com/ri2/DMX/data.txt", "r");
$myFile = "C:/path/to/myFile.txt";
$fh = fopen($myFile, 'w') or die("Could not open: " . mysql_error());
fwrite($fh, $string);
fclose($fh);
$sql = mysql_connect("localhost", "root", "password");
if (!$sql) {
die("Could not connect: " . mysql_error());
}
mysql_select_db("my_database");
$result = mysql_query("LOAD DATA INFILE '$myFile'" .
" INTO TABLE test FIELDS TERMINATED BY '|'");
if (!$result) {
die("Could not load. " . mysql_error());
}
Here what the table looked before running my PHP code: 这是在运行我的PHP代码之前表格的内容:
mysql> select * from test;
+--------+-----------+------------+
| DataID | Name | DOB |
+--------+-----------+------------+
| 145 | Joe Blogs | 17/03/1954 |
+--------+-----------+------------+
1 row in set (0.00 sec)
And here is the result after: 以下是结果:
mysql> select * from test;
+--------+-------------+------------+
| DataID | Name | DOB |
+--------+-------------+------------+
| 145 | Joe Blogs | 17/03/1954 |
| 234 | Carl Jones | 01/01/1925 |
| 98 | James Smith | 12/09/1998 |
| 234 | Paul Jones | 19/07/1923 |
| 986 | Jim Smith | 12/01/1976 |
+--------+-------------+------------+
5 rows in set (0.00 sec)
open txt file using fopen: 使用fopen打开txt文件:
$handle = @fopen("xyz.txt", "r"); //read line one by one
$values='';
while (!feof($handle)) // Loop til end of file.
{
$buffer = fgets($handle, 4096); // Read a line.
list($a,$b,$c)=explode("|",$buffer);//Separate string by the means of |
//values.=($a,$b,$c);// save values and use insert query at last or
// use mysql insert query here
}
THATS IT 而已
$sql = "INSERT INTO data_table (iddata, name, age) VALUES('".$a."','".$b."', **'** ".$c." **'** )";
issue is with the single quotes around $c. 问题在于$ c附近的单引号。 There is no single quotes.
没有单引号。 Add it.
添加它。
@ Anthony Forloney Your answer is right,just add the vertical bar[ | @ Anthony Forloney你的答案是对的,只需添加竖条[| ] at each very last of each row like this on your data.txt file...
]在data.txt文件中,每行的最后一行都是这样的......
and rest is same as in your answer.This is working for me... 和你的回答一样。这对我有用......
dont forget to add the quotes for varchar type for inserting datas to table.... 别忘了为varchar类型添加引号,以便将数据插入表....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.