@CHLHC@ 2025-12-19 21:26 采纳率: 100%
浏览 18
已结题

#c语言连接MySQL#sql语句执行失败#十分谢(〃` 3′〃)

专家你好(。・∀・)ノ゙嗨,vscode中 用c语言连接MySQL,
程序报错Error: mysql_query !,执行sql语句失败了,请问如何解决?

#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*引入连接Mysql的头文件和lib包*/
#include "mysql/mysql.h"
#pragma comment(lib,"libmysql")
#define len sizeof(struct people)

/*定义一些数据库连接需要的宏*/
#define HOST "localhost" /*MySql服务器地址*/
#define USERNAME "root" /*用户名*/
#define PASSWORD "1234" /*数据库连接密码*/
#define DATABASE "test1" /*需要连接的数据库*/

typedef struct {
    float preTaxSaiary;//本月税前工资
}TaxInput;
TaxInput Month[2];
 struct people {
    char num[20];
    char name[20];
    TaxInput Month[12];
    struct people* next;
};

void exeSql(char* sql);
void showMenu();

void showMenu()
{
    int option;
    printf("==============================   欢迎进入个人报税系统   ===============================================\n");
    printf("1. 新用户注册\n");
    printf("0. 保存并退出系统\n");
    printf("=======================================================================================================\n");
    return;
}

void exeSql(char* sql) {
    MYSQL my_connection; /*数据库连接*/
    int res;  /*执行sql语句后的返回标志*/
    MYSQL_RES* res_ptr; /*执行结果*/
    MYSQL_ROW result_row; /*按行返回查询信息*/
    MYSQL_FIELD* field;   /*返回表字段*/
    int row, column; /* 定义行数,列数*/
    mysql_init(&my_connection);
    if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS))
    {
        //printf("数据库连接成功!");
        /*vs默认编码为 gbk 防止乱码*/
        mysql_query(&my_connection, "set names gbk");
        res = mysql_query(&my_connection, sql);
        if (res) {
            /*现在就代表执行失败了*/
            printf("Error: mysql_query !\n");
            /*不要忘了关闭连接*/
            mysql_close(&my_connection);
        }
        else 
        {
            /*现在就代表执行成功了*/
            /*mysql_affected_rows会返回执行sql后影响的行数*/
            printf("%lld 行受到影响!\n", mysql_affected_rows(&my_connection));
            // 把查询结果装入 res_ptr
            res_ptr = mysql_store_result(&my_connection);
            // 存在则输出
            if (res_ptr) 
            {
                // 获取行数,列数
                row = (int)mysql_num_rows(res_ptr);
                column = (int)mysql_num_fields(res_ptr);
 
                //打印字段
                field = mysql_fetch_fields(res_ptr);
                for (int i = 0; i < column; i++)
                {
                    printf("%s ", field->name);
                    field++;
                }
                printf("\n");
 
                // 执行输出结果,从第二行开始循环(第一行是字段名)
                for (int i = 1; i < row + 1; i++)
                {
                    // 一行数据
                    result_row = mysql_fetch_row(res_ptr);             
                    for (int j = 0; j < column; j++)
                    {
                        printf("%s ", result_row[j]);
                    }
                    printf("\n");
                }
            }
            /*不要忘了关闭连接*/
            mysql_close(&my_connection);
        }
    }
    else
    {
        printf("数据库连接失败!");
    }
}

int main()
{
    int a;
    a=5000;
    char sql2[1024];
    struct people s1={"10","王",a};
    int choice;
     do
    {
        showMenu();
        printf("请输入你的选择: ");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            sprintf(sql2, "insert into user1 values('%s','%s',%f,)",s1.num,s1.name,s1.Month->preTaxSaiary);
            exeSql(sql2);
            break;
        case 0: 
            printf("感谢使用,再见!\n");
            choice = 0;
            break;
        default:
            printf("无效的选择,请重新作出选择\n");
            break;
        }
    }while (choice != 0);
    
    return 0;
}

自己已经尝试了很多遍都无法解决,希望专家能帮帮我(〃` 3′〃)

  • 写回答

1条回答 默认 最新

  • 关注

    针对你之前的问题,关键修复就3点:

    1. SQL语句末尾多了个逗号(%f,) 改成 %.2f)),语法错了;
    2. 结构体赋值不对,字符串用strcpy,工资字段要写全 s1.Month[0].preTaxSaiary = 5000.0f
    3. 加了mysql_error打印具体错误,后续有问题能直接看到原因。

    改完这几点就能跑通,有新错误发具体信息过来就行~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 12月19日