Я пытаюсь преобразовать следующую команду терминала:
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, но я все еще сталкиваюсь с некоторыми проблемами и хотел бы обратиться к этому сообществу в крайнем случае.
Благодарим вас за ваше терпение и помощь заранее.
С уважением,
Смиренно преданный ученик
Я думаю, что ваш сгенерированный 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 он работал нормально.
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;
и это написал к столу