本帖最后由 zwdnet 于 2011-06-02 14:23:37 编辑

解决方案 »

  1.   

    楼主用C++语言写的C程序?不管怎么样,
    bool InitDatabase(MYSQL * connect);
    它们都不能改变connect指针,
    所以到了下边这个函数调用的时候,connect的值还是初始的connect值。
    DisconnectDatabase(MYSQL * connect);解决的办法是:
    1. 对MYSQL*用全局变量,即两个函数都不带参数
    或者
    2. 使用双重指针MYSQL** connect当然,使用面向对象封装是比较好的方法。可惜你用C++写C程序。
      

  2.   

    /初始化mysql数据库
    bool InitDatabase(MYSQL * connect)
    {
        connect = NULL;    // 楼上正解,这里你都改变了指针的指向了,
                           //这是局部变量,与你main函数的关系不大
     //  .....
    }
      

  3.   

    多谢两位,我用C++只是为了用STL和string,连类都很少用。
    改成这样就对了:#include <iostream>
    #include <cstdlib>
    #include <mysql/mysql.h>
    #include <string>using namespace std;//初始化mysql数据库
    bool InitDatabase(MYSQL ** connect)
    {
    *connect = NULL;
    string server = "localhost";
    string user;
    string password;
    string database = "libmanager";
    cout<<"输入用户名:";
    cin>>user;
    cout<<"输入密码:";
    cin>>password;
    *connect = mysql_init(NULL);
    if (*connect == NULL)
    {
    cout<<"初始化连接失败"<<mysql_error(*connect)<<endl;
    return false;
    }
    if (!mysql_real_connect(*connect, server.c_str(),
    user.c_str(), password.c_str(),
    database.c_str(), 0, NULL, 0))
    {
    cout<<"连接MySQL数据库失败,失败代码:"<<mysql_error(*connect)<<endl;
    return false;
    } return true;
    }//断开数据库连接
    void DisconnectDatabase(MYSQL ** connect)
    {
    if (*connect != NULL)
    {
    mysql_close(*connect);
    }
    }int main()
    {
    MYSQL * connect;
    connect = NULL;

    if (!InitDatabase(&connect))
    {
    cout<<"连接数据库失败:"<<mysql_error(connect)<<endl;
    exit(1);
    }
    else
    {
    cout<<"数据i库连接成功"<<endl;
    }

    cout<<mysql_error(connect)<<endl;

    DisconnectDatabase(&connect);
    return 0;
    }