我正在尝试转换以下终端命令:
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值但是 我仍然遇到一些问题,并希望作为最后的手段接触这个社区。
感谢您提前耐心和协助。
此致
一个谦卑的学生
答案 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,它工作正常。