Запись в базу данных из файла

WC
На сайте с 26.07.2013
Offline
10
1003

Есть база стран к ним нужно добавить в поле text описание из файла txt одно описание в одной строке.

Использую такой скприт:

<?php  

//Подключаемся к базе с логином и паролем, принудительно задаем кодировку операций.
$db = mysql_connect ("localhost","user","password");
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
mysql_select_db ("data_base",$db) or die("Database Error: ".mysql_error());
//Предполагается, что файл strings.txt, который надо разобрать, лежит в той же папке, что и скрипт.
$fp = fopen("test.txt", "r");
// Открываем файл в режиме чтения
if ($fp)
{
while (!feof($fp))
{ //Считываем файл построчно в переменную stringtext
$stringtext = fgets($fp);
if (!empty($stringtext ))
{
//Если строка считалась, заносим ее в базу. Первый параметр NULL, так как база берет на себя его заполнение с последовательным увеличением.
$query = "UPDATE countries SET text = '".mysql_escape_string($stringtext)."'";
mysql_query($query) or die(mysql_error());


/* $query = "INSERT INTO countries (text) VALUES ('".mysql_escape_string($stringtext)."')";
mysql_query($query) or die(mysql_error()); */
}
}
}
else echo "Ошибка при открытии файла";
fclose($fp);
?>

Но почему то данные записываются в новые поля а не в те что уже есть в базе.

Подскажите как правильно сделать?

SD
На сайте с 20.07.2014
Offline
4
#1

Не хватает условия.

То есть


$query = 'UPDATE countries SET text = "' . mysql_escape_string($stringtext) . '" WHERE .... ';

А вот что за условие - нужно смотреть. Возможно порядковый номер строки равен id в таблице.

WC
На сайте с 26.07.2013
Offline
10
#2
SSL-Decision:
Не хватает условия.
То есть

$query = 'UPDATE countries SET text = "' . mysql_escape_string($stringtext) . '" WHERE .... ';

А вот что за условие - нужно смотреть. Возможно порядковый номер строки равен id в таблице.

А как сделать условие, чтобы раскидать строки из файла по строкам из базы например с 1 по 200 id по порядку

SD
На сайте с 20.07.2014
Offline
4
#3

Структуру таблицы покажите. И еще - первая строка в файле - это описание к первой (id = 1) стране в базе?

WC
На сайте с 26.07.2013
Offline
10
#4
SSL-Decision:
Структуру таблицы покажите. И еще - первая строка в файле - это описание к первой (id = 1) стране в базе?

country_id - 1

country_ru - Австралия

name_en - Australia

code - AU

text - пусто

title - пусто

SD
На сайте с 20.07.2014
Offline
4
#5

<?php   

//Подключаемся к базе с логином и паролем, принудительно задаем кодировку операций.
$db = mysql_connect ("localhost","user","password");
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
mysql_select_db ("data_base",$db) or die("Database Error: ".mysql_error());
//Предполагается, что файл strings.txt, который надо разобрать, лежит в той же папке, что и скрипт.
$fp = fopen("test.txt", "r");
// Открываем файл в режиме чтения
$id = 0;
if ($fp)
{
while (!feof($fp))
{ //Считываем файл построчно в переменную stringtext
$stringtext = fgets($fp);
if (!empty($stringtext ))
{
$id++;
//Если строка считалась, заносим ее в базу. Первый параметр NULL, так как база берет на себя его заполнение с последовательным увеличением.
$query = 'UPDATE countries SET text = "'.mysql_escape_string($stringtext).'" WHERE id = ' . $id;
mysql_query($query) or die(mysql_error());
}
}
}
else echo "Ошибка при открытии файла";
fclose($fp);
?>


---------- Добавлено 22.07.2014 в 14:11 ----------

Ошибся немного.

"WHERE id =" надо поменять на "WHERE country_id ="

WC
На сайте с 26.07.2013
Offline
10
#6
SSL-Decision:
<?php   

//Подключаемся к базе с логином и паролем, принудительно задаем кодировку операций.
$db = mysql_connect ("localhost","user","password");
mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
mysql_select_db ("data_base",$db) or die("Database Error: ".mysql_error());
//Предполагается, что файл strings.txt, который надо разобрать, лежит в той же папке, что и скрипт.
$fp = fopen("test.txt", "r");
// Открываем файл в режиме чтения
$id = 0;
if ($fp)
{
while (!feof($fp))
{ //Считываем файл построчно в переменную stringtext
$stringtext = fgets($fp);
if (!empty($stringtext ))
{
$id++;
//Если строка считалась, заносим ее в базу. Первый параметр NULL, так как база берет на себя его заполнение с последовательным увеличением.
$query = 'UPDATE countries SET text = "'.mysql_escape_string($stringtext).'" WHERE id = ' . $id;
mysql_query($query) or die(mysql_error());
}
}
}
else echo "Ошибка при открытии файла";
fclose($fp);
?>


---------- Добавлено 22.07.2014 в 14:11 ----------

Ошибся немного.
"WHERE id =" надо поменять на "WHERE country_id ="

Поменял как вы написали, по прежнему записывает в отдельные строки вместо того, чтобы добавлять в уже имеющиеся..

SD
На сайте с 20.07.2014
Offline
4
#7

Запрос выглядит именно так?


$query = 'UPDATE countries SET text = "'.mysql_escape_string($stringtext).'" WHERE country_id = ' . $id;

Попробуйте вывести его.


print $query;

И выполнить его вручную в каком-нибудь клиенте БД.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий