我用linux C连接MYSQL  代码: 
sprintf(query,"select * from guser where (g_name='刘尧' or e_nam e='刘尧' or t_name='刘尧') and g_id in (select g_id from guser where g_tel='15049616161')"); 
        if(!mysql_query(my_conn,query)) 
        { 
            ress=mysql_use_result(my_conn); 
            while((roww=mysql_fetch_row(ress))!=NULL) 
                { 
                    strcpy(liu,roww[5]); 
                    printf("%s,%d\n",row[3],liu[0]); 
                } 
            mysql_free_result(ress); 
        } 
应该有两条记录g_id分别为1和2,如果是一条记录就可以成功执行,两条就会报错“段错误”。同样的用“IN”的那条SQL语句在PHP里就可以成功执行(无论有几条记录)这是怎么回事?

解决方案 »

  1.   

    C API 规定发起下一次数据库操作前必须用mysql_free_result()释放掉前一次的变量,会不会“in”自动查询了两次? 
      

  2.   

    g_name='刘尧' or e_nam空格???e='刘尧' or t_name='刘尧'
      

  3.   

    in没有问题,in查询的结果是在服务器端处理的,不返回给客户端,客户端只需mysql_free_result一次即可。
      

  4.   

    select * from guser where (g_name='刘尧' or e_nam e='刘尧' or t_name='刘尧') and g_id in (select g_id from guser where g_tel='15049616161')你的SQL的语法不对 ,去掉这个空格
    select * from guser where (g_name='刘尧' or e_name='刘尧' or t_name='刘尧') and g_id in (select g_id from guser where g_tel='15049616161')