由于问题很急,希望大虾们多给点意见。在线等,解决就给分!!!
环境:vc6.0+mysql  用c API连接mysql;
问题描述:创建的ATL COM组件,主要做一些数据库操作。COM组件被php调用显示返回值的。
现在问题是,每次在应用服务器把com组件生成的dll注册后,只能调用一次,第二次就显示页面无法连接。 重起后又能连接一次。这是为什么?是不是php调用的libmysql.dll和com组件调用的libmysql.dll有冲突? 还是其它原因。ps:源代码中连接多次数据库,如:mysql_init(NULL);
mysql_real_connect(mysql,"","","","",3306,NULL,0))
                 char* sql = "select count(uid) from product_sponsor where s='2'";
int rc = mysql_real_query
得到结果判断   if(结果>0)
               {
                    mysql_init(NULL);
mysql_real_connect(mysql,"","","","",3306,NULL,0))
                 char* sql = "select count(uid) from product_sponsor where s='3'";
int rc = mysql_real_query
               }如果不重新连接就不能执行mysql_real_query查询。这个又是为什么? 我在普通mfc exe工程都可以的。

解决方案 »

  1.   

    应该是你没有注意组件的生命期,你的组件的生命周期可能很短,一次请求就启动一个组件,请求结束组件也释放了,所以不要指望能缓存某些东西供共享。
    还有一种可能性是你的组件是被CGI调用的,而每个CGI都是一个独立的进程,所以即使同时存在多个请求同时产生了多个组件实例,它们之间也无法共享数据。
      

  2.   

    这种情况可能需要你把com组件做成进程外组件exe,来保证它的生命期等