1

Тема: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Один из участников форума написал:
"Я действительно новичок в PHPMyadmin, имею больше навыков в других системах."
Я  - новичок не только в phpMyAdmin, но и вообще во всем этом, в программировании и использовании. Поэтому, уважаемые Профи, не судите строго, если что не так спрошу. И в ответе постарайтесь, пожалуйста, обойтись без профжаргона.

Итак: MySQL 4.0.15, phpMyAdmin 2.5.4
Но с номером версии phpMyAdmin мне не совсем понятно. Я так понял из сообщений на форуме, что до версии 2.7.0 должна быть вкладка "Импорт", а с версии 2.7.0 этой вкладки нет и для импорта надо использовать вкладку "SQL", что я и делаю.
Но при попытке импорта, я получаю следующее сообщение:

Ошибка

SQL-запрос : 

"address_book_id"

Ответ MySQL:


#1064 - 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 '"address_book_id"' at line 1

Я попробовал экспортировать данные и сразу импортировать их назад, но получил то же самое сообщение.

Может быть это связано с другим сообщением об ошибке, с чего надо было, наверное, начать?
При открытии БД в самом низу правого фрейма я обнаружил сообщение:

Ошибка
Дополнительные возможности для работы со связанными таблицами недоступны. Для определения причины нажмите сюда.

Когда я нажимаю "сюда", получаю следующее:

PMA Database ... Не готово[ Документация ]
Основные возможности связей Недоступно

Для меня это - китайская грамота.

Заранее благодарю за ответ.

2

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit
[offtopic]Никто и не собирается судить тебя строго - все когда-то были новичками и более того - каждый постоянно в чем-то новичок, в этом и заключается процесс развития - узнавать что-то новое, ранее неизвестное. И если вопрос задается ясно, то и ответ на него обычно следует ясный, если же тебе аппелируют к терминам - проси разъяснения, ищи в поисковиках - все равно придется овладеть терминологией рано или поздно. [/offtopic]

Но с номером версии phpMyAdmin мне не совсем понятно. Я так понял из сообщений на форуме, что до версии 2.7.0 должна быть вкладка "Импорт", а с версии 2.7.0 этой вкладки нет и для импорта надо использовать вкладку "SQL"

Все так и есть, но с точностью до наоборот: начиная с версий 2.7.0 появляется наряду с вкладкой "Экспорт" вкладка "Импорт". Был изменен механизм импорта, поэтому разработчики рекомендуют обновить версию. Я бы прислушался к их рекомендации.

Но твоя проблема думаю, не в версии,  а в дампе, который ты пытаешься импортировать. Запрос "address_book_id" как минимум не запрос совсем, а скорее название одного поля, задействованного в импорте. Ошибка SQL в синтаксисе запроса говорит как раз в пользу этого довода.

Приведи здесь пример своего дампа, если огромный - приведи первую часть, и вышли мне электропочтой на admin_at_php-myadmin.ru.

Может быть это связано с другим сообщением об ошибке, с чего надо было, наверное, начать?
При открытии БД в самом низу правого фрейма я обнаружил сообщение:
Ошибка
Дополнительные возможности для работы со связанными таблицами недоступны. Для определения причины нажмите сюда.

Нет, причина не в этом. Здесь тебе говорится, что у тебя не создана служебная база данных phpMyAdmin-а, которая нужна для фиксирования связей таблиц, описания полей, записей закладок, формирования графического представления баз данных (возможно в последних версиях), но это не критично.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

3

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

"...разработчики рекомендуют обновить версию. Я бы прислушался к их рекомендации."

К сожалению, я не имею такой возможности.

Я не нашел в словарях определения слова "дамп", но думаю, что это некая совокупность данных. И, насколько я понимаю, мой запрос именно совокупность данных, вот как это выглядит:


"address_book_id","customers_id","entry_gender","entry_company","entry_firstname","entry_lastname","entry_street_address","entry_suburb","entry_postcode","entry_city","entry_state","entry_country_id","entry_zone_id"
"1","1",,"Armatex","Vitalijs","Hrapunovics","Amtsstrasse 1","Ludwigshafen am Rhein","67059","Ludwigshafen",,"81","89"
"3","3","f",,"Ilona","Vilmane","Kaiser-Wilhelm-Str.62",,"67059","Ludwigshafen",,"81","89"
"9","9","m",,"Vit","Hrap","Amtsstrasse 1","Ludwigshafen","67059","Ludwigshafen",,"81","89"

"...вышли мне электропочтой на admin_at_php-myadmin.ru."

Что за странный адрес электронной почты? Или вместо "_at_" надо вставить "@"?

4

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Я не нашел в словарях определения слова "дамп", но думаю, что это некая совокупность данных.

Дамп (в данном случае дамп базы данных) - резервная копия базы данных в определенном формате (sql, csv и т.п.) Насколько я понял из приведенного тобой блока дампа - у тебя используется формат CSV.

Прочитай топик Проблемы CSV экспорта и импорта в phpMyAdmin.

Что за странный адрес электронной почты? Или вместо "_at_" надо вставить "@"?

Верно

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

5

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Проэкспериментировав полдня, я добился того, что phpMyAdmin изменил свое отношение ко мне и выдал нечто иное:

Ошибка
Кажется возникла ошибка в Вашем SQL запросе. Описание ошибки от MySQL сервера дано ниже, возможно, оно поможет Вам разобраться
ERROR: Неизвестная строка с пунктуацией @ 390
STR: ://
SQL: products_id,products_ean,products_quantity,products_shippingtime,products_model,group_ids,products_sort,products_image,products_price,products_discount_allowed,products_date_added,products_last_modified,products_date_available,products_weight,products_status,products_tax_class_id,product_template,options_template,manufacturers_id,products_ordered,products_fsk18
185,"",0,0,cd1,"","",http://www.a2zcds.com/productpics/img173.jpg,199.500,0.00,"","","",0.00,1,1,default,default,1,0,0
186,"",0,0,cd2,"","",http://www.a2zcds.com/productpics/img174.jpg,199.500,0.00,"","","",0.00,1,1,default,default,1,0,0
187,"",0,0,cd3,"","",http://www.a2zcds.com/productpics/img175.jpg,149.500,0.00,"","","",0.00,1,1,default,default,1,0,0
...
612,"",0,0,cd428,"","",http://www.a2zcds.com/ProductPics/img610.jpg,399.500,0.00,"","","",0.00,1,1,default,default,1,0,0
613,"",0,0,cd429,"","",http://www.a2zcds.com/ProductPics/img611.jpg,149.500,0.00,"","","",0.00,1,1,default,default,1,0,0

SQL-запрос : 

products_id,products_ean,products_quantity,products_shippingtime,products_model,group_ids,products_sort,products_image,products_price,products_discount_allowed,products_date_added,products_last_modified,products_date_available,products_weight,products_status,products_tax_class_id,product_template,options_template,manufacturers_id,products_ordered,products_fsk18 185,"",0,0,cd1,"","",http://www.a2zcds.com/productpics/img173.jpg,199.500,0.00,"","","",0.00,1,1,default,default,1,0,0 186,"",0,0,cd2,"","",http://www.a2zcds.com/productpics/img174.jpg,199.500,0.00,"","","",0.00,1,1,default,default,1,0,0 187,"",0,0,cd3,"","",http://www.a2zcds.com/productpics/img175.jpg,149.500,0.00,"","","",0.00,1,1,default,default,1,0,0
...
611,"",0,0,cd427,"","",http://www.a2zcds.com/ProductPics/img609.jpg,399.500,0.00,"","","",0.00,1,1,default,default,1,0,0 612,"",0,0,cd428,"","",http://www.a2zcds.com/ProductPics/img610.jpg,399.500,0.00,"","","",0.00,1,1,default,default,1,0,0 613,"",0,0,cd429,"","",http://www.a2zcds.com/ProductPics/img611.jpg,149.500,0.00,"","","",0.00,1,1,default,default,1,0,0

Ответ MySQL:

#1064 - 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 'products_id,products_ean,products_quantity,products_shippingtim

Оказалось, что MS Excel при "сохранить как... CSV (разделители - запятые)", вместо запятых вставляет ";". Еще я вставил ("") во все пустые столбцы, а также заменил на ("") все значения "NULL", правда не знаю, нужно ли было это делать.
Номер ошибки остался тот же, но MyAdmin мне что-то новое говорит в начале, чего я не понимаю. Может быть в кавычки должно быть взято все, что стоит между запятыми? Если это так, то тут я не знаю как это сделать, Excel это не делает, а файл большой, вручную - застрелиться.

6

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

ERROR: Неизвестная строка с пунктуацией @ 390
STR: ://

Чтож ты 390-ю строчку не указал?
Проблема может быть в синтаксисе данной строки или во времени выполнения запроса. Дело в том, что по умолчанию в phpMyAdmin стоит таймаут 300 секунд, если скрипт не успевает за это время отработать, он завершается принудительно. Поэтому если у тебя выполняется около 5 минут запрос - тогда, скорее всего дело в этом. Попробуй разбить дамп и импортировать несколькими частями. Если нет - тогда ошибка в запросе.

Оказалось, что MS Excel при "сохранить как... CSV (разделители - запятые)", вместо запятых вставляет ";"

Это не суть. При импорте дампа в phpMyAdmin присутствует возможность указания символа разделителя полей - в том числе и ;

заменил на ("") все значения "NULL", правда не знаю, нужно ли было это делать

нет в этом не было необходимости

MyAdmin мне что-то новое говорит в начале, чего я не понимаю.

Укажи здесь ошибку которую не понимаешь

Может быть в кавычки должно быть взято все, что стоит между запятыми?

это было бы корректно (phpMyAdmin при создании импорта именно так и поступает, ограничивая поля заданными символами), но это не критично.

Если проблему не решишь - высылай дамп на ящик, если он у тебя не многомегабайтный (в этом случае "копай" в сторону $cfg['ExecTimeLimit'])

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

7

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Нет, ничего не получается!
Я уже и так, и этак - не идет!
Самое непонятное в том, что файл, который я только что экспортировал и даже не открывал, при импорте выдает ту же ошибку. Ведь он сам создал этот файл, что ж он его принимать не хочет?
И такого сообщение, как в предыдущем письме, он больше не выдает.
А строка 390 ничем не отличалась от остальных.

8

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit
1) размер дампа какой?
2) сколько проходит времени до появления ошибки импорта?
2) какое значение upload_max_filesize в php.ini?

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

9

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

1) 66 КБ
2) 5 сек.
3) где он находится, этот php.ini?

10

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit

1) 66 КБ
2) 5 сек.

скорее всего проблема не в таймауте, и не в размере дампа, а все-таки  - в синтаксической ошибке на 390 строке.

3) где он находится, этот php.ini?

если размер твоего дампа действительно 66 Кб, то вряд ли значение директивы upload_max_filesize тебе поможет, т.к. по умолчанию максимальный размер закачиваемого файла - около 2 мегабайт. Убедиться в значении upload_max_filesize (а также узнать местонахождение php.ini) можно и не зная где расположен php.ini - c помощью функции phpinfo()

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

11

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit
Выбери в левом фрейме таблицу куда собираешься импортировать данные (она должна быть предварительно создана - это обязательное условие CSV импорта) -> переходишь на вкладку "SQL" -> игнорируешь просьбу указать местоположение импортируемого файла и переходишь по ссылке "Вставить текстовые файлы в таблицу" (расположена в нижней части страницы) -> Вот здесь уже указываешь местоположение своего дампа на локальной машине, параметры своего дампа и метод импорта 'LOAD DATA LOCAL' (если данный метод не доступен - тогда LOAD DATA)

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

12

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

К сожалению, не могу воспользоваться этой рекомендацией, т.к. у меня нет такой ссылки "Вставить текстовые файлы в таблицу" (расположена в нижней части страницы).
Вот все, что есть у меня:

Структура    SQL      Экспорт      Искать       Запрос по примеру
   


        Выполнить SQL запрос(ы) на БД [Документация] :


  Показать данный запрос снова

Или Месторасположение текстового файла :


Сжатие:  Автодетект     Нет     архивировать в gzip     архивировать в bzip

Больше ничего нет.

13

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit

К сожалению, не могу воспользоваться этой рекомендацией, т.к. у меня нет такой ссылки "Вставить текстовые файлы в таблицу" (расположена в нижней части страницы).

Читай внимательнее, что я тебе написал: "Выбери в левом фрейме таблицу куда собираешься импортировать данные...". Если перейти на вкладку SQL не выбрав предварительно таблицу, то ссылка действительно не появляется, т.к. импорт текстовых файлов может осуществляться только в таблицу - т.е. в уже готовое хранилище. Если же перейти на вкладку SQL, не выбрав таблицу, то ссылка не отображается - как ты и описал. Пробуй еще.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

14

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Уважаемый Lokki,
я, наверно, дождусь, что Вы пошлете меня куда-нибудь подальше (например, на какие-нибудь "Курсы для "чайников"", но у меня опять проблема.
Извините, что я невнимательно читал Ваше предыдущее сообщение. Теперь я разобрался, спасибо, и нашел "Вставить текстовые файлы в таблицу". Я уже хотел проздновать Победу, но получил очередное сообщение об ошибке:

Ошибка

SQL-запрос : 

LOAD DATA INFILE '/srv/www/htdocs/confixx/tmp/phpcpBCiJ' INTO TABLE `products` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'

Ответ MySQL:


#1045 - Access denied for user: 'web21@localhost' (Using password: YES)

Насколько я понимаю, мне отказано в доступе. Вот бы еше узнать - почему?
Еще раз спасибо!

15

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit

Насколько я понимаю, мне отказано в доступе. Вот бы еше узнать - почему?

Пароль указал неверно.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

16

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Но, как же так? Ведь я захожу в phpMyAdmin с паролем и открываю БД? Какой еще пароль нужен?

17

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit

Но, как же так?

Проверь имеет ли пользователь web21, под которым ты подключаешься привилегию FILE, которая как раз и дает право читать / записывать файлы с помощью LOAD DATA INFILE на сервер.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

18

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Как мне это проверить?

19

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit

Как мне это проверить?

В базе данных `mysql` в таблице `user` - значение поля `File_priv`

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

20

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Хвала Вашему терпению!
Только не подумайте, Бога ради, что я издеваюсь.
В моей базе данных нет поля "user".

21

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit

В моей базе данных нет поля "user".

Читаем внимательно "В базе данных `mysql` в таблице `user` - значение поля `File_priv`". Эта база данных (`mysql`) содержит служебную информацию и доступна администраторам, обычным же пользователям её, как правило, не показывают.
Ты попробовал только метод `LOAD DATA LOCAL`?

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

22

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Извините, описка.
Я имел ввиду таблицу, а не поле. В моей базе данных нет таблицы "user".
Кажется теперь я догадываюсь в чем дело. Моя база данных - это Интернет-магазин, который мне установил мой провайдер. Очевидно, я должен попросить его, чтобы он разрешил мне доступ к служебной информации моей базы данных. Наверно он должен был сделать это сразу?
LOAD DATA пробовал тоже.

23

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit

Моя база данных - это Интернет-магазин, который мне установил мой провайдер. Очевидно, я должен попросить его, чтобы он разрешил мне доступ к служебной информации моей базы данных. Наверно он должен был сделать это сразу?

Разумеется, ты как обычный пользователь, не имеешь доступа к базе `mysql`, что вполне логично с любой точки зрения. По этой причине разрешить проблему без участия хостера весьма проблематично. Тебе действительно следует обратиться к хостеру, но не с просьбой разрешить доступ к служебной базе, а с просьбой помочь разобраться в решении проблемы выполнения запроса `LOAD DATA`. Уверен, что твоя проблема с его участием решится быстро.

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)

24

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Ответ хостера (мой вольный перевод с немецкого):

Копируйте, пожалуйста, содержимое файла SQL вручную, с помошью команды SQL; НЕ через импорт файла.
Вы можете в Phpmyadmin, копировать непосредственно из Вашего файла в текстовое поле команды SQL.

Если Вам что-нибудь в этом понятно, объясните мне, пожалуйста, более доступно.

Спасибо!

25

Re: Проблема импорта в phpMyAdmin: синтаксическая ошибка в SQL запросе

Vit
Мда... некрасивый вариант предлагает твой немецкий хостер. Он предлагает тебе единоразово выполнить группу sql-запросов (дамп сохраненный в формате sql как раз и представляет собой группу запросов INSERT/UPDATE/REPLACE), скопировав содержимое дампа из буфера обмена в поле ввода sql-запросов во вкладке SQL.

Твои действия:
1 - создаешь дамп в формате sql (если он у тебя не создан). Для этого выбираешь в левом фрейме базу/таблицу, переходишь на вкладку Export, выбираешь здесь формат экспорта sql, выбираешь, что экспортировать с помощью групп чекбоксов. "Structure" (если ты хочешь чтобы при импорте база данных или таблицы были созданы, но ты должен понимать, что, если ты попытаешься создать таблицу уже существующую в базе данных - это вызовет ошибку), "Data" (экспортировать данные). Отмечаешь "Save as file" - сохраняешь. Все, дамп готов
2 - открываешь полученный дамп в любом текстовом редакторе, убираешь весь "мусор", который может вызвать брань MySQL
(например сепараторы: # -------------------------------------------------------- )
3 - копируешь содержимое в буфер обмена
4 - открываешь в phpMyAdmin необходимую базу данных /таблицу, переходишь на  вкладку "SQL", и вставляешь скопированное содержимое дампа из буфера обмена в поле  "Run SQL query/queries on database..." нажимаешь "Go". Вот и все.

Внимательно смотри дамп какой таблицы ты создаешь, что копируешь в буфер обмена, а также куда (в какую базу/таблицу) вставляешь записи

Нет неразрешимых проблем, есть неприятные решения. (Э. Борн)