【问题标题】:SQL error: near ".2016": syntax errorSQL 错误:“.2016”附近:语法错误
【发布时间】:2016-02-10 07:14:05
【问题描述】:
struct tm* tm_info;   
struct timeval tv;   
gettimeofday(&tv, NULL);   
tm_info = localtime(&tv.tv_sec);   
strftime(buffer, 33, "%d.%m.%Y, %H:%M", tm_info);   
printf("%s\n", buffer);

...

sql=(char*)malloc(sizeof("INSERT into MESSAGES(from_user,to_user,time_sent,message) values('")+30+sizeof("','")+30+sizeof("',")+100+sizeof(",' ")+500+sizeof(" ')"));
strcpy(sql,"INSERT into MESSAGES(from_user,to_user,time_sent,message) values('");
strcat(sql,login);
strcat(sql,"','");
strcat(sql,nume_cu_cine_vb);
strcat(sql,"',");
strcat(sql,buffer);
strcat(sql,",' ");
strcat(sql,array);
strcat(sql," ')");
 rc = sqlite3_exec(db, sql, nothing_to_do_query, 0, &zErrMsg);      
 **if( rc != SQLITE_OK ) {
            fprintf(stderr, "SQL error1: %s\n",zErrMsg);
        sqlite3_free(zErrMsg); }**

这是“.2016”附近的错误1..:我运行代码时出现语法错误(错误在服务器中)。 我不知道该怎么办。如果你知道,请帮助我,谢谢。

【问题讨论】:

  • 尝试将%Y-%m-%d %H:%M:%S'%Y-%m-%d %H:%M:%S' 作为您的strftime 格式字符串。

标签: c++ time sqlite buffer strftime


【解决方案1】:

如果您查看生成的最终查询字符串,您应该很容易看到问题所在。它看起来像这样:

INSERT into MESSAGES(from_user,to_user,time_sent,message) values('aaa','bbb',10.02.2016, 10:59,' ccc ')

您会注意到,日期时间按原样添加,没有引号,这完全打乱了查询。它应该看起来像这样:

INSERT into MESSAGES(from_user,to_user,time_sent,message) values('aaa','bbb', '10.02.2016, 10:59',' ccc ')

请注意完整日期周围的引号。这些将使其成为单个字段并使查询看起来有效。现在,为了让 MySQL 真正识别并能够解析该日期时间,您还应该将其放入 a valid format,例如 YYYY-MM-DD HH:MM:SS 而不是您正在使用的自定义日期时间。 所以最终的字段值应该是这样的:

'2016-02-10 10:54:12'

生成的查询应如下所示:

INSERT into MESSAGES(from_user,to_user,time_sent,message) values('aaa','bbb', '2016-02-10 10:54:12',' ccc ')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2016-03-12
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多