我的C ++代码中有以下MySQL插入查询:
snprintf(buffer, QUERY_MAX,
"INSERT INTO players (FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, MONEY, \
USERNAME, PASSWORD, GENDER, INCOME_LEVEL, CRIME_LEVEL, DOB) \
VALUES (\'%s\', \'%s\', \'%s\', \'%s\', %f, \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \
STR_TO_DATE(\'%s\', '%m/%d/%Y') \
);", /* values */, "10/15/2017");
我收到以下警告:
警告C4476:' snprintf' :未知类型的字段字符' m'格式 符
警告C4473:' snprintf' :没有为格式传递足够的参数 串
它似乎不喜欢STR_TO_DATE的格式说明符。它似乎让MySQL格式说明符与C ++混淆。我该如何解决这个问题?
我传递给%s的日期变量是我自己的格式' 10/15/2017'。
在缓冲区中,调试时有以下内容:
STR_TO_DATE('10/15/2017', 'm/-858993460/Y')
答案 0 :(得分:0)
您不能混合使用C和MySQL格式。使用C格式说明符并将参数作为字符串值传递:
STR_TO_DATE(\'%s\', '%s/%s/%s')
另外,你这样做是错误的,因为这是易于注入SQL的代码。请使用带参数的预准备语句。
答案 1 :(得分:0)
使用%%
转义格式字符串的MySQL部分中的百分比。
STR_TO_DATE(\'%s\', '%%m/%%d/%%Y')