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