|
|
|
| Вот тема на которую я давно жду ответа :) Наверняка многие знают почему у меня не получается?
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=21848&page=1 | |
|
|
|
|
|
|
|
для: _query
(08.08.2006 в 02:36)
| | Почему мне никто не отвечает? :( Мне очень важно чтобы получалось для практичееских целей.
Уважаемые М.Кузнецов и И.Симдянов я ваш преданный читатель! У меня есть все Ваши книги на русском языке кроме "Головоломки для хакера" которую я жду когда привезут(давно заказал) . :) | |
|
|
|
|
|
|
|
для: _query
(08.08.2006 в 21:16)
| | Я если честно не очень понял вопроса... вы хотите загрузить дамп или просто у вас текстовый файл? Дело пошло бы веселее, если бы вы приложили кусочек загружаемого файла и структуру таблицы. | |
|
|
|
|
|
|
|
для: cheops
(08.08.2006 в 21:24)
| | Да хоть два! Вот кусочек из файла sql.txt который я пробовал загрузить через пхп му админ
успешно и через свои файлы неуспешно
1;room;r;комната;Горроща;Березовая;;17,4;;5;9;-;14,0
2;room;r;комната;Горроща;Гоголя;;15;;1;2;-;9,2
3;room;r;комната;Горроща;Островского;;18;;1;5;-;15,5
4;room;r;комната;Горроща;Островского;;17,7;;1;5;Т;16,2
5;room;r;комната;ДП-1;Новоселов;;17;;7;9;-;14,6
6;room;r;комната;ДП-1;Советской армии;;12;;4;9;Т;13,0
7;room;r;комната;ДП-1;Советской армии;;14;;6;9;Б;13,7
|
Второй файл - создан специально для примера (для него был и load data попроще по примеру из книжки писал)
думаю это просто тектовый файл а дамп если я правильно понимаю это
-- Дамп данных таблицы 'rol_price'
--
INSERT INTO 'price' VALUES (1,'room', 'r', 'комната', 'Горроща', 'Березовая', '', '17,4', '', '5', '9', '-', '14,0');
INSERT INTO 'price' VALUES (2,'room', 'r', 'комната', 'Горроща', 'Гоголя', '', '15', '', '1', '2', '-', '9,2');
INSERT INTO 'price' VALUES (3,'room', 'r', 'комната', 'Горроща', 'Островского', '', '18', '', '1', '5', '-', '15,5');
| А разве его можно через Load data...?
Вот файлы которыми я пытаюсь это сделать
Форма отправления
<form action="update.php" method="post" enctype="multipart/form-data">
<input name="filename" type="file" />
<input type="submit" />
</form>
|
Вот который обрабатывает
<?
if(!empty($_FILES['filename']['tmp_name']))
{
$files=$_FILES['filename']['tmp_name'];
echo "<br>";echo $files;echo "<br>";
//$sql="LOAD DATA INFILE '$files' INTO TABLE 'price'";
$sql="LOAD DATA LOCAL INFILE '$files' INTO TABLE 'price' FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'";
echo $sql;
/*echo $sql выводит - LOAD DATA LOCAL INFILE 'C:\Program Files\PHP\uploadtemp\phpBA.tmp' INTO TABLE 'price' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY ' ' */
if(mysql_query($sql)) echo "<br>записалось"; else echo "<br>не записалось";
}
?>
|
Только скажите в чем проблема! :)
Ошибок не пишет файл видит. Только пишет что не записалось и в базу ни чего не записывает. :( | |
|
|
|
|
|
|
|
для: _query
(09.08.2006 в 09:03)
| | 1) Зачем используете ENCLOSED BY '\"' - у вас же нет ни одной двойной кавычки?
2) Для дампа лучше использовать скрипт из темы по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=1004 | |
|
|
|
|
|
|
|
для: cheops
(09.08.2006 в 11:22)
| | >1) Зачем используете ENCLOSED BY '"' - у вас же нет ни
>одной двойной кавычки?
потому, что так импортировал phpmyadmin такой код он написал когда все успешно
добавил.Поскольку у меня ничего дголго и упорно не получалось я последовал правилу
из известного думаю анекдота - "ничего не трогай ничего не меняй". :)
Хотя тоже спросил себя "зачем" ENCLOSED BY '"' да и ESCAPED BY '\\' то же вроде не нужен.
>2) Для дампа лучше использовать скрипт из темы по ссылке
>http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=1004
Для дампа согласен очень нужный и полезный скрипт.
Но мне нужно вставить информацию которая представлена как в двух файлах что я привел
в начале
1;room;r;комната;Горроща;Березовая;;17,4;;5;9;-;14,0
2;room;r;комната;Горроща;Гоголя;;15;;1;2;-;9,2
|
И мне кажется скрипт котрый вы рекомендовали для дампа не очень подходит в моем случае
поскольку код дампа я привел чтобы уточнить что мы оба одинаково понимаем слова дамп базы данных.
И мне нужно вставить именно текстовый файл в базу
можно его изменить например так
/* из файла прочли$fread="1;qwe
1;qw2
1;qw3
1;qw4"; */
$bufer=str_replace(";","',',$fread);
//чтобы формировалась строка
//вместо 1;qwe - 1','qwe
$quer = explode("\r\n", $bufer);
foreach($quer as $query)
{
$query="INSERT INTO 'price' VALUES ('$query');";
if(!mysql_query($query)) exit(mysql_error());
}
|
или так
$fread="1;qwe/
1;qw2/
1;qw3/
1;qw4";
$bufer=str_replace(";","','",$fread);
echo "$bufer <br>";
//чтобы формировалась строка
//вместо 1;qwe - 1','qwe
$quer = explode('/', $bufer);
foreach($quer as $query)
{
$query="INSERT INTO 'price' VALUES ('$query')";
echo "$query <br>";
$sql=mysql_query($query);
получим
NSERT INTO 'price' VALUES ('1','qwe')
INSERT INTO 'price' VALUES ('2','qw2')
INSERT INTO 'price' VALUES ('3','qw3')
INSERT INTO 'price' VALUES ('4','qw4')
}
|
или лучше сразу сформировать многострочный инсерт запрос и вставить в бд
$quer = explode('/', $bufer);
$sql="INSERT INTO 'price' VALUES ";
foreach($quer as $query)
{
$sql.="('$query'),";
echo "$query <br>";
}
//получится INSERT INTO 'tbl' VALUES ('11', 'wewe'), ('12', 'wewe'), ('13', 'wewe'),
//запятую в конце удалим например функцией trim(), если я правильно помню
//и в sql запрос
$sql=mysql_query($sql);
|
разделитель
(сначала написал в этом окошке, а потом попробовал применить чтобы проверить.
По разделителю \r\n почему то не разделил... это потому, что на самом деле не из файла или почему?)
Но мне кажется это не лучше load data ... поскольку пхпмуадмин так делает...
Это то же вариант конечно, но почему с load data у меня не выходит так и писать меньше
и проще кажется. И мне важно понять в чем же проблема? что я сделал не так? чтобы
в аналогичной ситуации найти решение самостоятельно и быстро. | |
|
|
|
|
|
|
|
для: _query
(10.08.2006 в 00:55)
| | У меня такое впечатление, что Вы пытаетесь импортировать не просто текст, поля которого разделены символом (;) , а Excel-лист в виде csv-файла | |
|
|
|
|
|
|
|
для: Trianon
(10.08.2006 в 09:11)
| | Да, вообще то они похожи конечно и можно было бы сохраниь и в cvs... наверное и надо было
но я все это сохранил в *.txt файл. Спасибо за идею :)
А по существу вопроса мне кто нибудь ответит? :) | |
|
|
|
|
|
|
|
для: _query
(10.08.2006 в 00:55)
| | А какую ошибку возвращает оператор LOAD DATA? Узнайте её при помощи функции mysql_error() - он вообще разрешён для вашей учётной записи? | |
|
|
|
|
|
|
|
для: cheops
(11.08.2006 в 00:10)
| | Да для моей записи разрешен поскольку делаю я это на localhost'е.
Пишет вот что:
LOAD DATA LOCAL INFILE 'C:\Program Files\PHP\uploadtemp\php75.tmp'
INTO TABLE 'price' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\' LINES TERMINATED BY '
'You have an error in your SQL syntax. Check the manual that corresponds to your
MySQL server version for the right syntax to use near ''' at line 2
|
В чем ошибка мне непонятно так написал ведь пхп му админ.
Удаляю
ENCLOSED BY '\"' ESCAPED BY '\\'
|
пишет
LOAD DATA LOCAL INFILE 'C:\Program Files\PHP\uploadtemp\php8D.tmp'
INTO TABLE 'price' FIELDS TERMINATED BY ';' LINES TERMINATED BY '
'The used command is not allowed with this MySQL version
|
Код
$sql="LOAD DATA LOCAL INFILE '$files'
INTO TABLE 'price' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'";
echo $sql;
if(mysql_query($sql)) echo "<br>записалось"; else echo mysql_error();
}
|
Интересно получается пхп му админу разрешено а мне нет!? :)
MySQl стоит MySQL 4.0.15
в таблице price ничего нет.
Так в чем же дело? | |
|
|
|
|
|
|
|
для: _query
(13.08.2006 в 00:02)
| | Из под какого пользователя выполняете запрос? Из под root или из под анонимного пользователя? | |
|
|
|
|
|
|
|
для: _query
(13.08.2006 в 00:02)
| | Cимволы \ в пути следует экранировать, т.е. вместо них следует писать \\
C:\\Program Files\\PHP\\uploadtemp\\php8D.tmp
|
| |
|
|
|
|
|
|
|
для: cheops
(13.08.2006 в 01:05)
| | >Из под root или из под анонимного пользователя?
да из под root
Вообще то
>
C:\Program Files\PHP\uploadtemp\php8D.tmp
|
это переменная $files ...
и если
$files выводит в броузер как C:\Program Files\PHP\uploadtemp\php8D.tmp значаит записана эта переменная записана как C:\\Program Files\\PHP\\uploadtemp\\php8D.tmp. Я так думаю...
Я писал
>пишет
>>
LOAD DATA LOCAL INFILE 'C:\Program Files\PHP\uploadtemp\php8D.tmp'
INTO TABLE 'price' FIELDS TERMINATED BY ';' LINES TERMINATED BY '
'The used command is not allowed with this MySQL version
|
Имелась ввиду $sql которая выводится в броузер echo'м...
Наверное то что эта запись была взята в code /code вас запутало? Или я чего то не понимаю...
Извините если что... | |
|
|
|
|
|
|
|
для: _query
(13.08.2006 в 18:59)
| | Тем не менее попробуйте вариант
<?php
$sql="LOAD DATA LOCAL INFILE '".mysql_escape_string($files)."' ..."
?>
|
а лучше попробуйте заменить обратные слеши на прямые. | |
|
|
|
|
|
|
|
для: cheops
(13.08.2006 в 23:17)
| | То же самое пишет...
Я пишу
$sql="LOAD DATA LOCAL INFILE '".mysql_escape_string($files)."' INTO TABLE 'price' FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'";
echo $sql;
if(mysql_query($sql)) echo "<br>записалось"; else echo mysql_error();
}
|
мне пишет:
C:\Program Files\PHP\uploadtemp\php24B.tmp
LOAD DATA LOCAL INFILE 'C:\\Program Files\\PHP\\uploadtemp\\php24B.tmp' INTO TABLE 'price' FIELDS TERMINATED BY ';' LINES TERMINATED BY ' 'The used command is not allowed with this MySQL version
в phpinfo написано о MySQL
mysql
MySQL Support enabled
Active Persistent Links 0
Active Links 0
Client API version 3.23.49
Ставил я ту о которой писал 4.0.15 но никак ни 3
Что это за Client API version 3.23.49 ?
В чем может быть проблема? | |
|
|
|
|
|
|
|
для: _query
(15.08.2006 в 07:35)
| | Это означает, что PHP использует клиентскую библиотеку от версии 3.29.49 - в принципе это не должно мешать. У вас MySQL выше версии 4.0.13? | |
|
|
|
|
|
|
|
для: cheops
(15.08.2006 в 10:44)
| | Да, у меня MySQL 4.0.15 | |
|
|
|
|
|
|
|
для: _query
(15.08.2006 в 23:16)
| | Тогда запрос должен работать... Вы из под root выполняете запрос? | |
|
|
|
|
|
|
|
для: cheops
(16.08.2006 в 11:40)
| | Да. Больше никого кроме root нет.
Да кстати на сервер все прекрасно залилось... только не на мой localhost
Написал
/pub/home/_query/tmp/phpSzHiBr
LOAD DATA LOCAL INFILE '/pub/home/_query/tmp/phpSzHiBr' INTO TABLE `price` FIELDS TERMINATED BY ';' LINES TERMINATED BY ' '
записалось
А на моем локалхосте пишет
C:\Program Files\PHP\uploadtemp\php156.tmp
LOAD DATA LOCAL INFILE 'C:\Program Files\PHP\uploadtemp\php156.tmp' INTO TABLE `price` FIELDS TERMINATED BY ';' LINES TERMINATED BY ' 'The used command is not allowed with this MySQL version
Может правда версия не такая какая?
Привожу еще раз код
if(!empty($_FILES['filename']['tmp_name']))
{
$files=$_FILES['filename']['tmp_name'];
echo "<br>";echo $files;echo "<br>";
//$sql="LOAD DATA INFILE `$files` INTO TABLE `tbl`";
$sql="LOAD DATA LOCAL INFILE '$files' INTO TABLE `price` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'";
echo $sql;
if(mysql_query($sql)) echo "<br>записалось"; else echo mysql_error();
}
|
Привожу потому что если написать
ENCLOSED BY '\"' ESCAPED BY '\\'
| и на сервере ругался на ошибку синтаксическую в чем она я не очень понял все вроде экранировано. И по идее все должно быть ok.
Версия MySQL 4.0.15 | |
|
|
|
|
|
|
|
для: _query
(17.08.2006 в 07:06)
| | А из командной строки на локальной машине у вас тоже всё нормально загружается? | |
|
|
|
|
|
|
|
для: cheops
(17.08.2006 в 11:33)
| | Запустил mysql.exe и написал :
LOAD DATA LOCAL INFILE 'C:\Program Files\PHP\uploadtemp\php3.tmp' INTO TABLE `rol_price` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'
|
это то что мне написало после того как я в очередной раз безуспешно попытался записать данные из файла.
поместил файл price.cvs в C:/MySQL/bin
LOAD DATA LOCAL INFILE 'price.cvs INTO TABLE `rol_price` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n'
|
Ошибок не написал но и не обновил ничего... почему то | |
|
|
|
|
|
|
|
для: _query
(18.08.2006 в 09:05)
| | То что не закрывающей кавычки после price.cvs - это опечатка или вы использовали именно этот запрос? | |
|
|
|
|
|
|
|
для: cheops
(18.08.2006 в 11:51)
| | Да опечатка, скорее всего... Я попробовал кстати сейчаси с закрытой кавычкой набрать и с незакрытой чтобы проверить что раньше набирал правильно (если неправильно набиру то должна ошибка появится). Так вот ошибку почему то не написал...
Написал
Мне кажется или раньше после успешного завершения mysql писал что то другое...
... Или я ошибаюсь... | |
|
|
|
|
|
|
|
для: _query
(19.08.2006 в 01:51)
| | Да mysql пишет '> если на предыдущей строчке осталась не закрытая одиночная кавычка. | |
|
|
|