mysql_real_query之前的mysql_real_escape_string

时间:2016-01-29 02:03:27

标签: mysql c api

我在MySQL中存储用户证书的哈希签名,以进行握手后验证。 X509_digest()生成一个20字节(SHA1)的哈希,它可能包含空字节,我将它与存储在BINARY(20)列中的数据库哈希进行比较。我的问题是:如果mysql_real_escape_string()处理空字节和其他MySQL特殊字符,为什么我应该使用mysql_real_query()而不是mysql_query(),如每个示例所示?请记住,在将哈希包含到查询字符串中之前,我正在转义哈希,因此没有空字节,特殊字符或误导性反斜杠会生成错误的strlen()输出。

感谢。

1 个答案:

答案 0 :(得分:1)

mysql_querymysql_real_query文档表明两者之间的区别在于mysql_real_query需要一个字符串和一个长度;并且mysql_query只接受一个字符串(因此需要执行strlen来获取长度)。

实际源代码中更为明确:

// From libmysql/libmysql.c
int STDCALL
mysql_query(MYSQL *mysql, const char *query)
{
  return mysql_real_query(mysql,query, (ulong) strlen(query));
}

mysql_query实际上是mysql_real_query的一个薄包装,如果你可以直接调用mysql_real_query,你应该这样做。