读取文本文件并将内容传输到mysql数据库

时间:2010-04-08 15:49:12

标签: php mysql database file text

我需要一个php脚本来读取.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

然后将这些存储到像这样的数据库中

** DataID |名称| DOB **

234    |Carl Jones|01/01/1925

如果有人能给我脚本来实现这一目标,我将非常感激。

更新

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

在SQL语法中出现以下错误错误; ...在第1行的')'附近使用正确的语法

4 个答案:

答案 0 :(得分:13)

您可能正在寻找的是MySQL的内置函数LOAD DATA INFILE,用于将包含数据库值的文本文件加载到数据库中。

  

LOAD DATA INFILE语句以非常高的速度将文本文件中的行读取到表中。文件名必须以文字字符串形式给出。

示例:

LOAD DATA INFILE 'data.txt' INTO TABLE my_table;

您还可以在文本文件中指定分隔符,如下所示:

LOAD DATA INFILE 'data.txt' INTO TABLE my_table FIELDS TERMINATED BY '|';

更新

这是一个完整的示例,我上传了一个测试数据文件here,这是我的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());
}

这是表格在运行我的PHP代码之前所看到的内容:

mysql> select * from test;
+--------+-----------+------------+
| DataID | Name      | DOB        |
+--------+-----------+------------+
|    145 | Joe Blogs | 17/03/1954 |
+--------+-----------+------------+
1 row in set (0.00 sec)

以下是结果:

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)

答案 1 :(得分:5)

使用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
}
是的,

答案 2 :(得分:0)

$sql = "INSERT INTO data_table (iddata, name, age) VALUES('".$a."','".$b."', **'** ".$c." **'** )";

问题是单引号在$ c附近。没有单引号。添加它。

答案 3 :(得分:0)

@ Anthony Forloney 你的答案是对的,只需添加竖线[| ] data.txt 文件中每行的最后一行... enter image description here

和休息与你的答案相同。这对我有用......

不要忘记添加 varchar 类型的引号,以便将数据插入表格....