请问大家对数据库更新查改我都是写一个sql语句,
然后$link->query($sql);请问对数据库的梗删查改,是不是也可以用类啊?
又好用的类嘛?发一个啊!!

解决方案 »

  1.   

    可以删除和更新操作都可以用你现在的这个类的query方法
      

  2.   


    #include "CDBMysql.h"
    #include <assert.h>
    /*构造函数,设定连接的服务器,用户名,密码和端口*/
    DBMysql::DBMysql(string host,string user,string password,unsigned int port)
    {
    mysql = mysql_init(NULL);
    num = 0;
    error="";
    query="";
    result = NULL;
    SetConnect(host,user,password,port);
    }
    DBMysql::DBMysql()
    {
    }
    /*设定连接的服务器,用户名,密码和端口*/
    void DBMysql::SetConnect(string host,string user,string password,unsigned int port)
    {
    DBMysql::host = host;
    DBMysql::user = user;
    DBMysql::password = password;
    DBMysql::port = port;
    }/*
    设定自动重动重连
    */
    void DBMysql::AutoReconnect(int autorcnt)
    {
    m_autoreconnect = autorcnt;
    }/*连接数据库*/
    unsigned int DBMysql::DBConnect()
    {
    MYSQL *con;
    if(mysql == NULL) 
    {
    error = "初始化mysql错误";
    return 1;
    }
    AutoReconnect();
    mysql_options(mysql, MYSQL_OPT_RECONNECT, &m_autoreconnect);
    con = mysql_real_connect(mysql,host.c_str(),user.c_str(),password.c_str(),NULL,port,NULL,0);
    if(con == NULL)
    {
    error=mysql_error(mysql);
    return mysql_errno(mysql);
    }
    return 0;
    }
    /*选择一个数据库*/
    unsigned int DBMysql::DBSelect(string database)
    {
    unsigned int re;
    if( mysql == NULL) return 1;
    db = database;
    re = mysql_select_db(mysql,db.c_str());
    if(re != 0)
    {
    error+=mysql_error(mysql);
    }
    return re;
    }
    /*设定sql语句*/
    void DBMysql::SetQuery(string q)
    { //assert(!q.empty());
    if(result != NULL ) 
    {
    mysql_free_result(result);
    }
    query = q;
    }
    /*执行sql语句*/
    unsigned int DBMysql::DBQuery()
    {
    unsigned int re;
    if( mysql == NULL) return 1;
    //assert(!query.empty());
    re = mysql_query(mysql,query.c_str());
    if(re == 0)
    {
    result = mysql_store_result(mysql);
    num = mysql_affected_rows(mysql);
    info.clear();
    arrInfo.clear();
    fields.clear();

    else
    {
    re = mysql_errno(mysql);
    error = mysql_error(mysql);
    cout<<error<<endl;
    }
    return re;
    }
    /*获取查询得到的一条结果*/
    strMap DBMysql::GetInfo()
    {
    MYSQL_ROW row;
    unsigned int i;
    assert(mysql != NULL);
    if(info.size() > 0) return info;
    if(result != NULL)
    {
    GetFields();
    row = mysql_fetch_row(result);
    if(row != NULL)
    {
    for(i=0;i<fields.size();i++)
    {
    info[fields[i]] = (char*)row[i];
    }
    }
    //mysql_free_result(result);
    }
    return info;
    }
    /*获取查询得到的所有结果*/
    vector<strMap> DBMysql::GetArray()
    {
    MYSQL_ROW row;
    unsigned int i;
    strMap tmp;
    assert(mysql != NULL);
    if(arrInfo.size() > 0) return arrInfo;
    if(result != NULL)
    {
    GetFields();
    while(row = mysql_fetch_row(result))
    {
    if(row != NULL)
    {
    for(i=0;i<fields.size();i++)
    {
    tmp[fields[i]] = (char *)row[i];
    }
    arrInfo.push_back(tmp);
    }
    }
    }
    return arrInfo;
    }/*获取sql语句执行影响的行数*/
    unsigned long DBMysql::GetNum()
    {
    return num;
    }
    /*获取插入后的id号*/
    unsigned long DBMysql::GetLastID()
    {
    return mysql_insert_id(mysql);
    }/*向数据库插入数据*/
    unsigned int DBMysql::InsertData(string table,strMap *data)
    {
    strMap::const_iterator iter;
    string fields,q1;
    int flag=0;
    assert(mysql != NULL);
    assert(!table.empty());
    assert(data != NULL); char tmp[102400];
    string val = ""; for(iter = data->begin();iter!= data->end();iter++)
    {

    bzero(tmp,102400);
    mysql_real_escape_string(mysql,tmp,(iter->second).c_str(),(iter->second).length());

    if(flag == 0)
    {
    fields += iter->first;
    val += "'";
    val += tmp;
    val += "'";
    flag = 1;
    }
    else
    {
    fields += ",";
    val += ",";
    fields += iter->first;
    val += "'";
    val += tmp;
    val += "'"; }

    }
    q1 = "insert into ";
    q1+=table;
    q1 += " (";
    q1 += fields;
    q1 += ") values (";
    q1 += val;
    q1 += ")";

    SetQuery(q1);
    return DBQuery();
    }
    /*根据条件修改数据*/
    unsigned int DBMysql::UpdateData(string table,strMap *data,string condition)
    {
    strMap::const_iterator iter;
    string q1;
    int flag=0;
    assert(mysql != NULL);
    assert(!table.empty());
    assert(data != NULL);
    for(iter = data->begin();iter!= data->end();iter++)
    {
    if(flag == 0)
    {
    q1 = "update ";
    q1+=table;
    q1+=" set ";
    q1+=iter->first;
    q1+="=";
    q1+=iter->second;
    q1+="";
    flag++;

    else
    {
    q1+=",";
    q1+=iter->first;
    q1+="=";
    q1+=iter->second;
    q1+="";
    }
    }
    if(!condition.empty())
    {
    q1+=" where ";
    q1+=condition;
    }
    SetQuery(q1);
    return DBQuery();
    }
    /*根据条件删除数据*/
    unsigned int DBMysql::DeleteData(string table,string condition)
    {
    string q;
    assert(mysql != NULL);
    assert(!table.empty());
    q="delete from ";
    q+=table;
    if(!condition.empty())
    {
    q+=" where ";
    q+=condition;
    }
    SetQuery(q);
    return DBQuery();
    }/*获取返回的错误信息*/
    string DBMysql::GetError()
    {
    return error;
    }/*返回查询后的列值*/
    vector<string> DBMysql::GetFields()
    {
    /*
    field = mysql_fetch_fields(result);
    然后通过field[i].name访问在此有错误,不知道为什么,可能是mysql的bug
    */
    MYSQL_FIELD *field;
    assert(mysql != NULL);
    if(fields.size()>0) return fields;
    while(field = mysql_fetch_field(result))
    {
    fields.push_back(field->name);
    }
    return fields;
    }/*析构函数*/
    DBMysql::~DBMysql()
    {
    if(result != NULL)
    mysql_free_result(result);
    fields.clear();
    error="";
    info.clear();
    db="";
    arrInfo.clear();
    mysql_close(mysql);
    }void DBMysql::SetCharset(string charset)
    { charset = "set names "+charset;
    mysql_query(mysql,charset.c_str());
    }