如何将复杂的linux终端命令输出插入mysql数据库表

时间:2017-12-12 02:23:46

标签: mysql linux database terminal output

我正在尝试转换以下终端命令:

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    |                |
+--------+-------------------+------+-----+---------+----------------+

基于这些错误,我假设它与特殊字符有关,主要是“$”,但它也可能是命令中的“+”或“”空格。

我做了一些研究,我尝试使用escape charactesr''vs``vs“$”vs“\”来使命令的输出成为mysql表的INSERT值但是 我仍然遇到一些问题,并希望作为最后的手段接触这个社区。

感谢您提前耐心和协助。

此致

一个谦卑的学生

1 个答案:

答案 0 :(得分: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,它工作正常。