Прочитайте текстовый файл и перенесите содержимое в базу данных MySQL - PullRequest
6 голосов
/ 08 апреля 2010

Мне нужен скрипт 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 ]

13 голосов
/ 08 апреля 2010

Возможно, вам понадобится встроенная функция 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 '|';

Обновление:

Вот полный рабочий пример, я загрузил файл тестовых данных здесь и вот мой 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)
5 голосов
/ 08 апреля 2010

открыть текстовый файл, используя fopen:

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

ЭТО ЭТО

0 голосов
/ 22 ноября 2014

@ Энтони Форлони Ваш ответ правильный, просто добавьте вертикальную черту [| ] в каждом последнем из каждой строки, как это в вашем data.txt файле ... enter image description here

и отдых такой же, как в вашем ответе. Это работает для меня ...

Не забудьте добавить кавычки для varchar типа для вставки данных в таблицу ....

0 голосов
/ 18 ноября 2013
$sql = "INSERT INTO data_table (iddata, name, age) VALUES('".$a."','".$b."', **'** ".$c." **'** )";

проблема с одинарными кавычками около $ c. Там нет одинарных кавычек. Добавьте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...