2017-07-31 66 views
0

我有我的C以下的MySQL插入查询++代码:如何在C++中使用MySQL的STR_TO_DATE?

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:格式 未知类型栏中的 'M': '的snprintf'符

警告C4473: '的snprintf':没有足够的参数传递的格式字符串

它似乎不喜欢我的格式说明符STR_TO_DATE。这似乎是MySQL格式说明符与C++的混淆。我怎样才能解决这个问题?

我的日期变量被传递给%s是我自己的格式'10/15/2017'。

在缓冲区,它在调试如下:

STR_TO_DATE('10/15/2017', 'm/-858993460/Y') 

回答

0

您不能混用C和MySQL的格式。用C格式说明,并通过参数字符串值:

STR_TO_DATE(\'%s\', '%s/%s/%s') 

而且,你这样做不对,因为这是SQL注入容易代码。改为使用带有参数的预准备语句

0

使用%%来逃避格式字符串的MySQL部分中的百分比。

STR_TO_DATE(\'%s\', '%%m/%%d/%%Y')