读书人

vb6 调用mysql_real_escape_string函数

发布时间: 2014-01-03 00:30:09 作者: rapoo

vb6 调用mysql_real_escape_string函数的问题!请教!
本帖最后由 seawaycao 于 2013-12-29 11:18:51 编辑 最近在研究用VB6操作mysql数据库的项目,基本的操作功能已经完成。就是发现一个问题,若SQL语句中包含了C(C++)中的转义字符(例如:\t\n)或二进制数据时,就会出现字符丢失或乱码的情况,百度了很多资料,问题出在mysql_real_escape_string的上面,但实际使用这个函数时一直出错,还没有错误提示,VB6直接崩溃!

我的引用为:

Public Declare Function mysql_real_escape_string Lib "libmySQL" (ByVal lMysql As Long, _
ByRef lTo As String, _
ByVal lFrom As String, _
ByVal lLength As Long) As Long


mysql源码中对该函数的定义如下:
/*
Add escape characters to a string (blob?) to make it suitable for a insert
to should at least have place for length*2+1 chars
Returns the length of the to string
*/

ulong STDCALL
mysql_escape_string(char *to,const char *from,ulong length)
{
return (uint) escape_string_for_mysql(default_charset_info, to, 0, from, length);
}

ulong STDCALL
mysql_real_escape_string(MYSQL *mysql, char *to,const char *from,
ulong length)
{
if (mysql->server_status & SERVER_STATUS_NO_BACKSLASH_ESCAPES)
return (uint) escape_quotes_for_mysql(mysql->charset, to, 0, from, length);
return (uint) escape_string_for_mysql(mysql->charset, to, 0, from, length);
}



大家帮忙看看,在VB6中怎么调用mysql_real_escape_string函数呢?万分感谢!

[解决办法]
引用:
您的第二段代码里面的sSQL变量没有声明啊,和pStr是一样的?
如果不是一样的,那怎么调用EscapeString函数呢?


Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal pszStr As Long, ByVal lLenB As Long) As Long

Public Function EscapeString(ByRef lMysql As Long, ByVal pStr As String) As String

Dim lPtr As Long
Dim lRC As Long
Dim tmpStr As String

tmpStr = String(lstrlen(sSQL) * 2 + 1, Chr(0)) '就是这里的sSQL,
lRC = StrPtr(tmpStr)
lPtr = mysql_real_escape_string(lMysql, ByVal lRC, StrPtr(pStr), Len(tmpStr))
lPtr = SysAllocStringByteLen(lRC, lPtr)
EscapeString = CStringPointerToVbString(lPtr)
End Function



呵呵, 是的,sSQL 改 pStr就行,你可以加入 class DBConn


Public Function EscapeString(ByVal pStr As String) As String
Dim lPtr As Long
Dim lRC As Long
Dim tmpStr As String

tmpStr = String(lstrlen(pStr) * 2 + 1, Chr(0))
lRC = StrPtr(tmpStr)
lPtr = mysql_real_escape_string(m_Mysql, ByVal lRC, StrPtr(pStr), Len(tmpStr))


lPtr = SysAllocStringByteLen(lRC, lPtr)
EscapeString = CStringPointerToVbString(lPtr)
End Function



代如下:


Set gConn = New DBConn

'打
' MY_MULTI_STATEMENTS --Enable multi-stmt support(多果集支持)
gConn.OpenConnection 服器IP, UserID, Userpwd, dbname, 3306, MY_MULTI_STATEMENTS, "utf8"

MsgBox gConn.EscapeString("select 'hello \t\r mysql\n!!!' as hello")
set gconn = nothing



读书人网 >VB

热点推荐