C语言连接mysql报错,要怎么弄啊?


#include <stdio.h>
#include <mysql.h>


int main() {
    if (mysql_library_init(0,NULL,NULL)){
        fprintf(stderr,"could not initialize\n");
        exit(-1);
    }
    MYSQL *conn= mysql_init(NULL);
    if(conn==NULL)
        fprintf(stderr,"create failed\n");
    conn= mysql_real_connect(conn,"localhost","root","159874","test",3306, NULL,0);
    if(conn==NULL){
        fprintf(stderr,"连接失败\n");
        exit(-1);
    }
    mysql_query(conn,"set names utf8");
    char *execSql="select * from emp";
    mysql_real_query(conn,execSql, strlen(execSql));

    MYSQL_RES *rs= mysql_use_result(conn);
     if(rs){
         MYSQL_ROW row;
         while((row= mysql_fetch_row(rs))){
             for (int i=0; i< mysql_num_fields(rs); ++i){
                 printf("%s",row[i]);
             }
             printf("\n");
         }
     }
    mysql_free_result(rs);
    mysql_close(conn);
    mysql_library_end();

    return 0;
#include <stdio.h>
#include <mysql.h>


int main() {
    if (mysql_library_init(0,NULL,NULL)){
        fprintf(stderr,"could not initialize\n");
        exit(-1);
    }
    MYSQL *conn= mysql_init(NULL);
    if(conn==NULL)
        fprintf(stderr,"create failed\n");
    conn= mysql_real_connect(conn,"localhost","root","159874","test",3306, NULL,0);
    if(conn==NULL){
        fprintf(stderr,"连接失败\n");
        exit(-1);
    }
    mysql_query(conn,"set names utf8");
    char *execSql="select * from emp";
    mysql_real_query(conn,execSql, strlen(execSql));

    MYSQL_RES *rs= mysql_use_result(conn);
     if(rs){
         MYSQL_ROW row;
         while((row= mysql_fetch_row(rs))){
             for (int i=0; i< mysql_num_fields(rs); ++i){
                 printf("%s",row[i]);
             }
             printf("\n");
         }
     }
    mysql_free_result(rs);
    mysql_close(conn);
    mysql_library_end();

    return 0;
#include <stdio.h>
#include <mysql.h>


int main() {
    if (mysql_library_init(0,NULL,NULL)){
        fprintf(stderr,"could not initialize\n");
        exit(-1);
    }
    MYSQL *conn= mysql_init(NULL);
    if(conn==NULL)
        fprintf(stderr,"create failed\n");
    conn= mysql_real_connect(conn,"localhost","root","159874","test",3306, NULL,0);
    if(conn==NULL){
        fprintf(stderr,"连接失败\n");
        exit(-1);
    }
    mysql_query(conn,"set names utf8");
    char *execSql="select * from emp";
    mysql_real_query(conn,execSql, strlen(execSql));

    MYSQL_RES *rs= mysql_use_result(conn);
     if(rs){
         MYSQL_ROW row;
         while((row= mysql_fetch_row(rs))){
             for (int i=0; i< mysql_num_fields(rs); ++i){
                 printf("%s",row[i]);
             }
             printf("\n");
         }
     }
    mysql_free_result(rs);
    mysql_close(conn);
    mysql_library_end();

    return 0;
#include <stdio.h>
#include <mysql.h>


int main() {
    if (mysql_library_init(0,NULL,NULL)){
        fprintf(stderr,"could not initialize\n");
        exit(-1);
    }
    MYSQL *conn= mysql_init(NULL);
    if(conn==NULL)
        fprintf(stderr,"create failed\n");
    conn= mysql_real_connect(conn,"localhost","root","159874","test",3306, NULL,0);
    if(conn==NULL){
        fprintf(stderr,"连接失败\n");
        exit(-1);
    }
    mysql_query(conn,"set names utf8");
    char *execSql="select * from emp";
    mysql_real_query(conn,execSql, strlen(execSql));

    MYSQL_RES *rs= mysql_use_result(conn);
     if(rs){
         MYSQL_ROW row;
         while((row= mysql_fetch_row(rs))){
             for (int i=0; i< mysql_num_fields(rs); ++i){
                 printf("%s",row[i]);
             }
             printf("\n");
         }
     }
    mysql_free_result(rs);
    mysql_close(conn);
    mysql_library_end();

    return 0;
}

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/803059
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言连接mysql数据库详细步骤
  • 您还可以看一下 杨鑫老师的数据仓库操作课程中的 MySql常用命令、函数等及数据小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    对于C语言连接MySQL出错的情况,需要先确定具体是什么错误。常见的错误包括连接不上MySQL服务器、执行SQL语句出错等。针对不同的错误,需要采取不同的解决方案。

    1. 连接不上MySQL服务器的情况:

    首先需要检查MySQL服务器是否正常运行,是否允许远程连接。如果MySQL服务器正常运行,并且允许远程连接,则可以检查以下几个方面:

    1)检查连接参数

    连接MySQL服务器需要指定主机名或IP地址、用户名、密码、数据库名称等参数,在调用mysql_real_connect()函数时需要传入这些参数。需要确保这些参数的值是正确的,例如:

    MYSQL mysql;
    
    const char* host = "127.0.0.1"; // MySQL服务器IP地址
    const char* user = "root"; // MySQL用户名
    const char* passwd = "password"; // MySQL密码
    const char* db = "database"; // 数据库名称
    unsigned int port = 3306; // MySQL服务器端口号
    
    mysql_init(&mysql);
    mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0);
    

    2)检查网络连接

    如果连接参数正确无误,仍然无法连接MySQL服务器,可能是由于网络问题。可以使用ping命令检查网络连接是否正常,例如:

    ping 127.0.0.1
    

    如果ping命令能够正常返回结果,则说明网络连接正常。如果ping命令不能返回结果,可能是由于网络问题,可以尝试重启网络或者重新配置网络。

    3)检查MySQL服务器配置

    如果以上两个方面都检查完毕仍然无法连接MySQL服务器,可能是由于MySQL服务器配置问题。可以检查以下几个方面:

    a. MySQL服务器是否允许远程连接

    在MySQL服务器配置文件my.cnf中,可以通过设置bind-address参数来限制MySQL服务器接受的连接。如果该参数的值为127.0.0.1,则只允许本地连接;如果该参数的值为0.0.0.0,则允许任意IP地址的连接。

    b. MySQL服务器是否已经启动

    可以使用以下命令检查MySQL服务器是否已经启动:

    service mysql status
    

    如果MySQL服务器没有启动,可以使用以下命令启动MySQL服务器:

    service mysql start
    
    1. 执行SQL语句出错的情况:

    如果连接MySQL服务器成功,但是执行SQL语句出错,可能是由于SQL语句本身有错误,也可能是由于SQL语句执行过程中出现了异常情况。可以使用以下方法来解决:

    1)检查SQL语句

    使用MySQL客户端工具(例如MySQL Workbench)来测试SQL语句是否正确。如果SQL语句在MySQL客户端工具中能够执行成功,则问题可能是由于C语言程序执行MySQL C API时出现了错误。可以检查代码中对MySQL API的调用是否正确,以及返回值是否正确。

    2)检查SQL语句执行过程中的异常情况

    使用mysql_error()函数来获取最后一次执行MySQL函数时产生的错误信息。如果返回值为非空字符串,则说明执行MySQL函数时发生了错误。可以通过该函数来判断SQL语句执行过程中出现了哪些异常情况。例如:

    MYSQL mysql;
    const char* host = "127.0.0.1";
    const char* user = "root";
    const char* passwd = "password";
    const char* db = "database";
    unsigned int port = 3306;
    
    mysql_init(&mysql);
    mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0);
    
    mysql_query(&mysql, "SELECT * FROM table");
    
    const char* error = mysql_error(&mysql);
    if (error && strlen(error) > 0) {
        printf("Error: %s\n", error);
    }
    

    3)使用预处理语句

    预处理语句可以提高SQL语句的执行效率,避免SQL注入等问题,同时也可以降低程序的复杂度。使用预处理语句需要先调用mysql_stmt_init()函数来初始化MYSQL_STMT句柄,然后使用mysql_stmt_prepare()函数来准备预处理语句,最后使用mysql_stmt_execute()函数来执行预处理语句。例如:

    MYSQL mysql;
    MYSQL_STMT* stmt;
    const char* host = "127.0.0.1";
    const char* user = "root";
    const char* passwd = "password";
    const char* db = "database";
    unsigned int port = 3306;
    
    mysql_init(&mysql);
    mysql_real_connect(&mysql, host, user, passwd, db, port, NULL, 0);
    
    stmt = mysql_stmt_init(&mysql);
    if (!stmt) {
        fprintf(stderr, "mysql_stmt_init(), out of memory\n");
        exit(1);
    }
    
    if (mysql_stmt_prepare(stmt, "SELECT * FROM table", strlen("SELECT * FROM table")) != 0) {
        fprintf(stderr, "mysql_stmt_prepare(), failed\n");
        fprintf(stderr, "Error: %s\n", mysql_stmt_error(stmt));
        exit(1);
    }
    
    if (mysql_stmt_execute(stmt) != 0) {
        fprintf(stderr, "mysql_stmt_execute(), failed\n");
        fprintf(stderr, "Error: %s\n", mysql_stmt_error(stmt));
        exit(1);
    }
    
    mysql_stmt_close(stmt);
    

    4)使用ORM框架

    ORM框架可以将SQL语句和C语言代码结构分离,将面向对象的思想引入到数据库操作中,提高程序的可维护性和可扩展性。常见的ORM框架包括MySQL Connector/C++, SQLAPI++等。例如:

    #include <mysql_connection.h>
    #include <mysql_driver.h>
    #include <cppconn/prepared_statement.h>
    
    sql::Driver* driver = get_driver_instance();
    sql::Connection* conn = driver->connect("tcp://127.0.0.1:3306", "root", "password");
    conn->setSchema("database");
    
    sql::PreparedStatement* stmt = conn->prepareStatement("SELECT * FROM table");
    sql::ResultSet* result = stmt->executeQuery();
    while (result->next()) {
        int id = result->getInt("id");
        std::string name = result->getString("name");
        std::string description = result->getString("description");
        // ...
    }
    
    delete result;
    delete stmt;
    delete conn;
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^