Как вставить вывод сложной команды терминала linux в таблицу базы данных mysql

0

Я пытаюсь преобразовать следующую команду терминала:

date +"%m/%d/%Y %H:%M:%S"

выход которого:

12/07/2017 19:49:48

в команду терминала, которая ВСТАВЛЯЕТ вывод терминала с date +"%m/%d/%Y %H:%M:%S" качестве значений в таблице базы данных mysql:

Полную команду терминала, которую я пытаюсь использовать, это:

echo "INSERT INTO block (date, data, sha256) VALUES ($(date +"%m/%d/%Y %H:%M:%S"), "dogs are loyal", "6324542a2ce0b80ad32e45b5ca8e8b9dd02da8802c6fc9939637dabda113e35e");"| mysql blockchain -u root;

И я получаю следующую ошибку:

ERROR 1064 (42000) at line 1: 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 '19:49:48, dogs are loyal, 6324542a2ce0b80ad32e45b5ca8e8b9dd02da8802c6fc9939637da' at line 1

Что странно, я замечаю из-за ошибки, которую выполняет команда date, но она захватывает только %H:%M:%S так как в ней упоминается 19:49:48.

Я попытался запустить команду непосредственно в интерфейсе командной строки mysql и получил следующую ошибку:

ERROR 1305 (42000): FUNCTION blockchain.$ does not exist

Моя информация о базе данных выглядит следующим образом:

Мое имя базы данных "blockchain", таблица называется "block", а описания таблиц перечислены ниже.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| blockchain         |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.01 sec)

mysql> show tables;
+----------------------+
| Tables_in_blockchain |
+----------------------+
| block                |
+----------------------+

mysql> desc block;

+--------+-------------------+------+-----+---------+----------------+
| Field  | Type              | Null | Key | Default | Extra          |
+--------+-------------------+------+-----+---------+----------------+
| id     | int(255) unsigned | NO   | PRI | NULL    | auto_increment |
| date   | varchar(20)       | NO   |     | NULL    |                |
| data   | varchar(250)      | NO   |     | NULL    |                |
| sha256 | varchar(64)       | NO   |     | NULL    |                |
+--------+-------------------+------+-----+---------+----------------+

Исходя из этих ошибок, я предполагаю, что это имеет какое-то отношение к специальному символу, в первую очередь к "$", но также может быть "+" или "" пробелом в команде.

Я провел некоторое исследование, и я попытался сыграть с побегом charactesr '' vs '' vs "$" vs "\", чтобы вывести команды из значений INSERT в таблицы mysql, но я все еще сталкиваюсь с некоторыми проблемами и хотел бы обратиться к этому сообществу в крайнем случае.

Благодарим вас за ваше терпение и помощь заранее.

С уважением,

Смиренно преданный ученик

Теги:
database
terminal
output

1 ответ

1
Лучший ответ

Я думаю, что ваш сгенерированный sql не имеет правильных котировок вокруг данных. Попробуйте следующее:

echo "INSERT INTO block (date, data, sha256) VALUES ('$(date +"%m/%d/%Y %H:%M:%S")', "\'dogs are loyal\'", "\'6324542a2ce0b80ad32e45b5ca8e8b9dd02da8802c6fc9939637dabda113e35e\'");"| mysql blockchain -u root;

Для моего ubuntu vm он работал нормально.

  • 1
    Спасибо MH Rasel, это было простое исправление, я был на правильном пути, но пробовал \ and 'в неправильных местах. Я смог воспользоваться твоей рекомендацией: извиняюсь за ошибку новичка, но многому научился. Спасибо за ваше время и терпение. root@kali:~# echo "INSERT INTO block (date, data, sha256) VALUES ('$(date +"%m/%d/%Y %H:%M:%S")', "\'dogs are loyal\'", "\'6324542a2ce0b80ad32e45b5ca8e8b9dd02da8802c6fc9939637dabda113e35e\'");"| mysql blockchain -u root; и это написал к столу

Ещё вопросы

Сообщество Overcoder
Наверх
Меню