9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
1

Странное поведение phpmyadmin

12.08.2015, 10:43. Показов 568. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При снятии дампа с mysql через phpmyadmin получаю на выходе
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
DROP TABLE IF EXISTS `files`;
CREATE TABLE IF NOT EXISTS `files` (
  `disk` varchar(255) default NULL,
  `hl` varchar(255) default NULL,
  `ll` varchar(255) default NULL,
  `extensions` varchar(255) default NULL,
  `date` datetime default NULL,
  `size` double default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\dir\\', 'files', '.xml', '2015-08-07 11:13:00', 389);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\dir\\', '07.08.2015', '.xml', '2015-08-07 16:04:00', 561);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'mysqldump', '.exe', '2008-02-13 13:00:00', 2146944);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'files', '.sql', '2015-08-07 11:35:00', 0);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'DirToXML', '.bat', '2015-08-07 15:59:00', 5375);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\dir\\', 'files', '.xml', '2015-08-07 11:13:00', 389);
Но когда при помощи скрипта
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
chcp 65001
echo -- > C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo DROP TABLE IF EXISTS `files`; >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo CREATE TABLE IF NOT EXISTS `files` ( >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo   `disk` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo   `hl` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo   `ll` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo   `extensions` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo   `date` datetime default NULL, >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo   `size` double default NULL >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
echo ) ENGINE=MyISAM DEFAULT CHARSET=utf8; >> C:\Users\admin\Documents\filemonsql\dir\%date%.sql
 
 for /f "delims=" %%a in ('dir %1 /S /B /A:-D-L') do @(
 >nul ping -n 1 -w 1 ""
 >>"C:\Users\admin\Documents\filemonsql\dir\%date%.sql" echo INSERT INTO `files` VALUES ('%%~da', '\%%~pa\', '%%~na', '%%~xa', '%%~ta', %%~za^)^;
 )
@pause
Собираю содержимое каталога или диска, то на выходе получаю немного отличающуюся информацию:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DROP TABLE IF EXISTS `files`; 
CREATE TABLE IF NOT EXISTS `files` ( 
  `disk` varchar(255) default NULL, 
  `hl` varchar(255) default NULL, 
  `ll` varchar(255) default NULL, 
  `extensions` varchar(255) default NULL, 
  `date` datetime default NULL, 
  `size` double default NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\\', '07.08.2015', '.sql', '07.08.2015 16:11', 557);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\\', 'DirToXML', '.bat', '11.08.2015 15:59', 5001);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\\', 'DirToXML_rezerv', '.bat', '07.08.2015 15:59', 5375);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\\', 'impotTOmysql', '.bat', '07.08.2015 16:42', 389);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\\', 'mysql', '.bat', '07.08.2015 16:53', 56);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\\', 'mysqldump', '.exe', '13.02.2008 13:00', 2146944);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\\', 'spy off', '.bat', '10.08.2015 16:37', 3955);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\dir\\', '10.08.2015', '.xml', '11.08.2015 10:19', 37955313);
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\dir\\', '11.08.2015', '.sql', '11.08.2015 16:00', 1370);
При попытке засунуть инструментами phpmyadmin дамп в базу, то в строке с адресом расположения файла пропадают двойные слешы, а одинарный просто пропадает и в бд я имею на выходе следующую строку
SQL
1
\UsersadminDocumentsfilemonsqldir\
Что за ерись и как её побороть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2015, 10:43
Ответы с готовыми решениями:

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

странное поведение Qt
до сих пор ковыряюсь с установкой qt в винде, поставил в XP, всё работает, всё компилится, всё...

Странное поведение!
Доброго времени суток! На лицо странное (на мой взгляд) поведение С++ Builder 6. Итак код:...

Странное поведение First
Приветствую всех! Есть такая выборка из основной таблицы: SELECT Поставки.Код_товара,...

5
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
17.08.2015, 09:57  [ТС] 2
Попробовал изменить подход и все сделать через cmd, но не тут то было.
Поясню логику свою логику. Если не идет через РНРмайадмин, то возможно ошибка где-то в самом майадмине. Решил напрямую обращаться через mysql.exe.

Сформировал информацию для БД скриптом:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
: устанавливаем кодировку UTF-8. 
: Кодировка необходима для корректного открывания и импорта полученного *.XML в программу Excel
chcp 65001
: Тут формируется правильный заголовок для *.bat файла. 
: Обратите внимание на символ ^. Этот символ позволяет нам выводить в echo специальные символы.
: Символ ^ делает "экранирование" специальных символов, и они печатаются к нормальный текст.
echo -- > C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
: Структура таблицы `files`
echo DROP TABLE IF EXISTS `files`; >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo CREATE TABLE IF NOT EXISTS `files` ( >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo   `disk` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo   `hl` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo   `ll` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo   `extensions` varchar(255) default NULL, >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo   `date` datetime default NULL, >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo   `size` double default NULL >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
echo ) ENGINE=MyISAM DEFAULT CHARSET=utf8; >> C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat
: В этой части начинается магия.
: Для понимания того, что тут написано используйте help для команды for
: В скобках мы кладем команду dir, которая запускается с s-рекурсией по всем подпапкам, b-вывод полных путей до файлов с именами файлов, x-позволяет нам без ошибок, если мена файлов очень длинные, продолжить выполнение скрипта. Х-сократит слишком длинные имена, без потери связи.
: после do выполняем echo, которое выводит нам необходимую информацию из DIR, разбивая её по ключам из команды FOR, записывая вывод в файл.
: Двойная >> необходимо, чтобы дозаписывалась\писалась каждая прошенная строка
 for /f "delims=" %%a in ('dir %1 /S /B /A:-D-L') do @(
 >nul ping -n 1 -w 1 ""
 >>"C:\Users\admin\Documents\filemonsql\dir_output\%date%.bat" echo INSERT INTO `files` VALUES ('%%~da', '%%~pa', '%%~na', '%%~xa', '%%~ta', %%~za^)^;
 )
: Вызываем импорт sql в базу данных через mysql.exe
%~dp0mysql.bat

На выходе получаю:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 
DROP TABLE IF EXISTS `files`; 
CREATE TABLE IF NOT EXISTS `files` ( 
  `disk` varchar(255) default NULL, 
  `hl` varchar(255) default NULL, 
  `ll` varchar(255) default NULL, 
  `extensions` varchar(255) default NULL, 
  `date` datetime default NULL, 
  `size` double default NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', '14.08.2015', '.bat', '14.08.2015 15:55', 996);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'DirToSQL', '.bat', '17.08.2015 09:45', 3298);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'DirToXML_rezerv', '.bat', '07.08.2015 15:59', 5375);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'mysql', '.bat', '17.08.2015 09:43', 123);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\dir_output\\', '14.08.2015', '.bat', '14.08.2015 16:00', 991);
INSERT INTO `files` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\dir_output\\', '17.08.2015', '.bat', '17.08.2015 09:45', 991);
Полученные данные запускаются в БД вот этим скриптом:

Windows Batch file
1
2
chcp 65001
C:\AppServ\MySQL\bin\mysql.exe -uroot -pPASSWORD --default-character-set=utf8 samba < %~dp0dir_output\%date%.bat
На выходе получаю ошибку:
Windows Batch file
1
ERROR at line 12: Unknown command '\U'.
Но как только одинарные \ меняются на двойные \\, то все чудесным образом начинает работать. Как добавить их через скрипт, подскажите. Парсить БД на выходе и менять символ \ на \\ не предлагать )))
0
2421 / 2273 / 592
Регистрация: 27.05.2011
Сообщений: 7,782
17.08.2015, 17:54 3
Цитата Сообщение от inzaim Посмотреть сообщение
Если не идет через РНРмайадмин, то возможно ошибка где-то в самом майадмине
Нет ошибки. Все верно. Обратный слэш экранирует следующий символ. Например фраза "i'm ok". В запросе она рушит синтаксис.
MySQL
1
VALUES ('i'm ok' , 'blabla');
Чтобы майлскуэл приняла кавычку создан знак экранирования - обратный слэш.
MySQL
1
VALUES ('i\'m ok' , 'blabla');
В базу добавится без слэша, но теперь mysql понимает, что эта кавычка не часть запроса - данные.
\\ - в контексте mysql это один экранированный слэш
MySQL
1
INSERT INTO `files` VALUES ('C:', '\\Users\admin\Documents\filemonsql\dir\\', '11.08.2015', '.sql', '11.08.2015 16:00', 1370);
"\a" это не слэш а, это экранированная а. Надо "\\a" для одного слэша или 4 слэша для двух
1
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
18.08.2015, 12:51  [ТС] 4
Теперь понятно.

Внедрил финт ушами, чтобы избавиться от этой неприятной особенности:
Windows Batch file
1
2
3
4
5
6
7
8
9
setlocal enabledelayedexpansion
set FileToChange=%~dp0dir_output\%date%.sql
set "mask=\"
set "mask2=\\"
for /f "delims=" %%i in (%FileToChange%) do (
set out=%%i
set "out=!out:%mask%=%mask2%!"
echo !out! >> %~dp0dir_output\%date%.bat
)
Но пока остался открытым вопрос как сформировать вывод:
Windows Batch file
1
2
3
4
for /f "tokens=1,2,3,4,5 delims=." %%a in ('dir %1 /S /B /A:-D-L') do @(
>nul ping -n 1 -w 1 ""
echo %%~na | findstr "'" >nul || echo INSERT INTO `%now%` VALUES ('%%~da', '%%~pa', '%%~na', '%%~xb', '%%~ac', '%%~td', '%%~ze'^)^; >>"%~dp0dir_output\%date%.sql"
)
Что бы он корректно заполнял БД, а не отрезал от неё куски как в примере:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--  
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";  
DROP TABLE IF EXISTS `18_08_2015`;  
CREATE TABLE IF NOT EXISTS `18_08_2015` (  
  `disk` VARCHAR(255) DEFAULT NULL,  
  `hl` VARCHAR(255) DEFAULT NULL,  
  `ll` VARCHAR(255) DEFAULT NULL,  
  `extensions` VARCHAR(255) DEFAULT NULL,  
  `attributes` VARCHAR(255) DEFAULT NULL,  
  `date` VARCHAR(255) DEFAULT NULL,  
  `size` DOUBLE DEFAULT NULL  
) ENGINE=MyISAM DEFAULT CHARSET=utf8;  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'DirToSQL', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'DirToSQL_worked100', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'DirToXML_rezerv', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'mysql', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'тестовый русский_файл    — копия', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'тестовый русский_файл ~@#$%&()}{', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'тестовый русский_файл Ё№;%()', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\', 'тестовый русский_файл', '', '', '', '');  
INSERT INTO `18_08_2015` VALUES ('C:', '\\Users\\admin\\Documents\\filemonsql\\dir_output\\', '18', '', '', '', '');
0
814 / 797 / 201
Регистрация: 21.09.2012
Сообщений: 2,656
18.08.2015, 17:39 5
Что за изобретение велосипеда?
0
9 / 9 / 0
Регистрация: 14.10.2014
Сообщений: 69
20.08.2015, 15:34  [ТС] 6
В чем велосипед?
0
20.08.2015, 15:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2015, 15:34
Помогаю со студенческими работами здесь

БД, странное поведение
Привет Создаю источник данных из папки (скрин 1 и 2). Запускаю проект, добавляю 3 строки, нажимаю...

Странное поведение
привет всем. Пишу тут одну работку вот код добавления нового товара. Я использую поле Акция, если...

WD 1,5 ТБ странное поведение
Привет В общем, есть такой расклад Железо: SSD под основную ОС (win7) и обычный HDD (WD, 1,5...

Странное поведение VS
Все работает, однако при открытии дизайна формы пишет: Object reference not set to an instance...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru