из текстового файла импортировать в поле существующей таблицы

Статус
В этой теме нельзя размещать новые ответы.

seoboy

Профессор
Регистрация
17 Мар 2007
Сообщения
162
Реакции
36
подскажите как сделать. есть база base1 в ней таблица sait в ней несколько полей одно из них url содержит строки с уллами. есть текстовый файл,где каждый урл на отдельной строке. как можно загнать урлы в таблицу?
 
PHP:
<?php
$host_base = 'localhost';
$user_base = 'login';
$base = 'название базы';
$password_base='password';

function db_connect($host,$user,$password,$base)
{
  $result = mysql_pconnect($host,$user,$password) or die ("<strong class='error'>Query failed : " . mysql_error() . "</strong>");
  mysql_select_db($base) or die ("<strong class='error'>Query failed : " . mysql_error() . "</strong>");
  return $result;
}
db_connect($host_base,$user_base,$password_base,$base);

$query="SET NAMES 'utf8'";
$result = mysql_query ($query)   or die ("<strong>Query failed </strong><br>line: ".__line__."<br>file: ".__file__."<br>error: ".mysql_error());



$fp = fopen('путь к файлу', 'r');
if (!$fp) {
    echo 'Ошибка при открытии файла';
}
while (false !== ($char = fgets($fp))) {
	$sql = 'INSERT INTO `название таблицы`(`название поля куда заносить`) VALUES (\'' . $char . '\')';
	$res = mysql_query($sql);
}
fclose($fp);
как-то так)
 
Можешь попробывать URL закинуть в EXCEL и импортировать в базу(если конечно она у тебя изначально пустая)
 
нет база не пустая
 
Смотря сколько строк в этом текстовом файле
если строк пусть даже 1000, то в приведенном скрипте (пусть даже с mysql_pconnect()) у тебя базу будет насиловать эти тысячи запросов. а если строк больше?

рекомендую (из опыта)
1. или использовать родные возможности мускуля для загрузки файла: "load data CONCURRENT INFILE 'путь_к_файлу' INTO TABLE таблица"
2. или пересобрать файл и создать один файл в котором будет 1000 строк типа:
"
INSERT INTO `название таблицы`(`название поля куда заносить`) VALUES ('урл1');
INSERT INTO `название таблицы`(`название поля куда заносить`) VALUES ('урл2');
"
и уже этот файл выполнить(залить) одним махом
поверьте мне - это в сотни раз быстрее выполнится.
 
из файла быстро загружает команда
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
 
да в excel проще всего сформировать запросы, копирнуть их и выполнить.
 
Замечание к приведенному Ins1ne коду.
Список URL может содержать спецсимволы, что приведет к ошибке обработки.
Для устранения такого рода ошибок полезно обрабатывать входящие символьные строки функцией addslashes()
Соответственно стоит вместо
while (false !== ($char = fgets($fp))) {
написать
while (false !== ($char = addslashes(fgets($fp)))) {
 
В екселе есть замечательная строковая функция СЦЕПИТЬ. Если нужно разово залить что то в базу я обычно пользуюсь ей. Схема такая вставляем урлы в первую колонку в екселе. Во второй колонке составляем формулу =СЦЕПИТЬ("INSERT INTO mytable(myfield) VALUES('";A1;"');"). КОпируете на все строки и всё. Единтсвенное если строк больше 10000 есть смысл повозится с булк инсертом.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху