在传递给mysql_query之前,有效地转义C中的引号

jpa*_*ich 2 c mysql sql

简而言之,我通常使用sprintf在C中构建MySQL查询

sprintf(sqlcmd,"update foo set dog=\"lab\" where description=\"%s\"",some_desc);
mysql_query(some_conn,sqlcmd);
Run Code Online (Sandbox Code Playgroud)

然而,如果some_desc就像Crazy 5"Dog,那么MySql Server会尖叫,因为它对悬空引用感到困惑.

在C中,最好是扫描some_desc替换"with"",或者在MySql中有一个函数可以更好地包装它...即description = string(Crazy 5"Dog)?

谢谢!

nin*_*alj 7

虽然MySQL有一个mysql_real_escape_string()函数,但你可能应该使用预备语句,这允许你使用?占位符而不是实际参数,然后在每次执行语句之前将它们绑定到实际参数.