有两个问题,请教各位:
1、mysql_query()和 mysql_real_query()有什么区别?2、
如果我先把链接m_connptr关闭
mysql_close(m_connptr);
然后再执行
mysql_query(m_connptr,ddl.c_str());
为什么是直接引起程序的崩溃,
而不是返回一个错误的信息呢?

解决方案 »

  1.   

    1、mysql_query()和 mysql_real_query()有什么区别?
    这个在MYSQL的手册中就有说明如下。
    mysql_query() cannot be used for statements that contain binary data; you must use mysql_real_query() instead. (Binary data may contain the “\0” character, which mysql_query() interprets as the end of the statement string.) In addition, mysql_real_query() is faster than mysql_query() because it does not call strlen() on the statement string. 以下由GOOGLE自动翻译
    mysql_query()不能用于语句包含二进制数据,你必须使用mysql_real_query()代替。 (二进制数据可能包含“\ 0”的性质,这mysql_query()作为字符串结束的声明解释。)此外,mysql_real_query()比快mysql_query(),因为它不调用strlen()来对语句字符串。
      

  2.   

    mysql_query不会使得崩溃吧,你要调用mysql_query前判断一下是否为0了。当然前提是你在close的时候设置connptr=0;
    mysql_query会自己找'\0'然后才知道要执行的sql语句是什么,而mysql_real_query就直接告诉它不用找了,第第几位就结束了。前者要调用strlen,后者可能是直接memcpy,所以速度理论上肯定会比mysql_query快一些。还有就是如果你的sql语句中包含有二进制的话,假如二进制中有'\0',我是说假如,假如这么运气不好的话,你用mysql_query会出问题。
      

  3.   

    m_connptr都被关闭了。下面还用???
      

  4.   

    mysql_query 要判断句柄的有效性
    处于程序安全考虑也要这样做啊