+ -
当前位置:首页 → 问答吧 → mysql c api 报错 Commands out of sync

mysql c api 报错 Commands out of sync

时间:2011-08-11

来源:互联网

C/C++ code

#include "stdafx.h"
#include <windows.h>
// #include <my_global.h>
// #include <my_sys.h>
#include <mysql.h> 

#include <iostream>

using namespace std ;


char szIp[] = "192.168.1.11" ;
char szUser[] = "root" ;
char szPasswd[] = "root" ;
char szDbname[] = "userdb" ;
unsigned int uPort = 3306 ;
unsigned long uEx = 0 ; //CLIENT_MULTI_STATEMENTS ;



DWORD WINAPI databasetest( void* ) 
{
    MYSQL mysql_data ;
    memset( &mysql_data, 0 , sizeof(mysql_data) ) ;

    mysql_init( &mysql_data ) ;

    char value = 1 ;

    //mysql 中的自动重连机制
    mysql_options( &mysql_data , MYSQL_OPT_RECONNECT , (char *)&value ) ;

    if ( !mysql_real_connect(&mysql_data , szIp , szUser, szPasswd, szDbname , uPort , NULL , uEx ) )
    {

        cout << "database connect failed : " << endl ;
        cout << mysql_error(&mysql_data) << endl  ;
        return FALSE ;
    }
    else
    {
        cout << "OnThreadIni success " << endl ;
    }

    //查询,返回一个结果集
    MYSQL_RES *m_lpRes = NULL ;
    string mysql = "Call CheckPassword ( 'user0001' , '0000000000000000' , 17305772 )" ;

    if ( 0 == mysql_real_query( &mysql_data , mysql.c_str(), mysql.size() ) )
    {
        m_lpRes = mysql_store_result(&mysql_data) ;
        if ( m_lpRes )
        {
            cout <<  "check user success" << endl ;
        }
        else
        {
            cout <<  "check user failed" << endl ;
        }
        mysql_free_result(m_lpRes);
    }
    else
    {
        cout << mysql_error( &mysql_data ) << endl ;
    }


    //该存储过程不返回结果
    mysql = "Call LogOutLog ( 'user0001' ,10 ) " ;

    if ( 0 == mysql_real_query( &mysql_data , mysql.c_str(), mysql.size() ) )
    {
        cout << "mysql_real_query success" << endl ;
    }
    else
    {
        cout << mysql_error( &mysql_data ) << endl ;
    }

    mysql_close( &mysql_data ) ;

    return 0 ;
    //再次查询
}


int _tmain(int argc, _TCHAR* argv[])
{

    if ( mysql_library_init( 0 , NULL , NULL ))
    {
        cout << "server init failed" << endl ;
        return 0 ;
    }

    for ( int i = 0 ; i < 1 ; i++ )
    {
        CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)databasetest , NULL , 0 , NULL ) ;
    }
    
    mysql_library_end() ;

    cout << "close mysql connect" << endl ;
    char _in ;
    cin>>&_in ;
    return 0;
}



第二条查询语句执行的时候,会报错误
Commands out of sync; you can't run this command now

翻过资料,也没能解决这个问题,希望大家能帮帮忙

使用的是 MySQL Connector C 6.0.2\lib\opt\libmysql.lib

作者: newmczh   发布时间: 2011-08-11

看看这个:

http://blog.csdn.net/grass_ring/article/details/3499402

作者: iihero   发布时间: 2011-08-11

A.2.13. 命令不同步
如果遇到“命令不同步”错误,将无法在你的客户端代码中运行该命令,你正在以错误顺序调用客户端函数。
例如,如果你正使用mysql_use_result(),并打算在调用mysql_free_result()之前执行新查询,就会出现该问题。如果你试图执行两次查询,但并未在两次查询之间调用mysql_use_result()或mysql_store_result(),也会出现该问题。

作者: rucypli   发布时间: 2011-08-11