- 论坛徽章:
- 0
|
总结帖,说说这个问题怎么解决
首先用上面兄弟的说法,上google搜索 mysql_affected_rows+CLIENT_FOUND_ROWS 可以找到文章,说
mysql_affected_rows函数返回的行数是否包含where子句匹配得到,但是没有发生改变的行,是由mysql_real_connect函数
的最后一个参数clientflag决定的,如果连接数据库的时候给一个CLIENT_FOUND_ROWS参数的话,就可以返回where匹配到的
行数,而不是实际影响的行数。
MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long clientflag);
这个是C函数接口的,可是我的程序用的是mysql++,还好mysql++是开源的,继续深挖代码。。
最后找到一个FoundRowsOption类干的是设这个参数的事情,代码例子如下
try{
m_pCon = new mysqlpp::Connection();
FoundRowsOption *option = new FoundRowsOption(true); //don't delete it, mysqlpp will manage this ptr
m_pCon->set_option(option); //set CLIENT_FOUND_ROWS option
m_pCon->connect(cfg.m_Database, cfg.m_Host, cfg.m_User, cfg.m_Password); //connnect
} catch (....) {
......
}
注意这里创建一个FoundRowsOption 对象要创建在堆上,因为调用set_option之后mysql++里面的DBDriver类会管理这块内存的释放,
如果创建在栈上出了这个函数就释放掉了,等到释放DBDriver的时候会释放多一次,导致Segment Fault |
|