使用C/C++中的SSL访问MySql

Arn*_*rn7 5 c c++ mysql ssl

我已经将MySql配置为使用SSL,它在PHP中运行良好.但是,当我尝试使用C/C++程序连接到数据库时,它不起作用.

变量:

host = "localhost"
psw = "pass"
db = "database"
Run Code Online (Sandbox Code Playgroud)

没有SSL:

usr = "userNOSSL"
conn = mysql_init(NULL);
mysql_real_connect(conn, host, usr, psw, db, 0, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

这个效果很好.我可以轻松地检索数据:

query = "SELECT x FROM y"

mysql_query(conn, query);

result = mysql_store_result(conn);

num_fields = mysql_num_fields(result);

while ((row = mysql_fetch_row(result)))
{
    for(i = 0; i < num_fields; i++)
    {
        printf("%s ", row[i] ? row[i] : "NULL");
    }
    printf("\n");
}

mysql_free_result(result);
Run Code Online (Sandbox Code Playgroud)

使用SSL(CLIENT_SSL标记):

usr = "userSSL"
conn = mysql_init(NULL);
mysql_real_connect(conn, host, usr, psw, db, 0, NULL, CLIENT_SSL);
Run Code Online (Sandbox Code Playgroud)

错误

错误:我的"MYSQL*conn;" 对象没有得到像"没有ssl"这样的参数.所以,它发生了一个例外:

A first chance of exception at 0x0f18c274 in test_Class.exe : 0xC0000005: 
Acces violation when reading on location 0x00000048.
An unhandled exception at 0x0f18c274 in test_Class.exe : 0xC0000005: 
Acces violation when reading on location 0x00000048.
Run Code Online (Sandbox Code Playgroud)

在这一行:

num_fields = mysql_num_fields(result);
Run Code Online (Sandbox Code Playgroud)

如果我这样做同样的错误:

mysql_ssl_set(.SOMEOPTIONTHERE.)
mysql_real_connect(conn, host, usr, psw, db, 0, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

chr*_*don 0

我的猜测是您的本地主机未正确设置来处理 SSL。试试这个: http: //www.chriscalender.com/?tag =ssluserlocalhost