有两个问题,请教各位:
1、mysql_query()和 mysql_real_query()有什么区别?2、
如果我先把链接m_connptr关闭
mysql_close(m_connptr);
然后再执行
mysql_query(m_connptr,ddl.c_str());
为什么是直接引起程序的崩溃,
而不是返回一个错误的信息呢?
1、mysql_query()和 mysql_real_query()有什么区别?2、
如果我先把链接m_connptr关闭
mysql_close(m_connptr);
然后再执行
mysql_query(m_connptr,ddl.c_str());
为什么是直接引起程序的崩溃,
而不是返回一个错误的信息呢?
这个在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()来对语句字符串。
mysql_query会自己找'\0'然后才知道要执行的sql语句是什么,而mysql_real_query就直接告诉它不用找了,第第几位就结束了。前者要调用strlen,后者可能是直接memcpy,所以速度理论上肯定会比mysql_query快一些。还有就是如果你的sql语句中包含有二进制的话,假如二进制中有'\0',我是说假如,假如这么运气不好的话,你用mysql_query会出问题。
处于程序安全考虑也要这样做啊