MYSQL_BIND结构的成员buffer_length与length的区别

*近在搞MySQL的编程,直接使用mysql_query()没有多大的问题。不过为了提高效率,改用了mysql_stmt_prepare(),mysql_stmt_bind()与mysql_stmt_execute()来查询。这样,只要对查询语句解析一次,就可以多次执行,且由于使用二进制来交换数据,不必进行多次转换。如果一切顺利的话,效率应该有很大的提高。

不过,事情没有预想中的那么一帆风顺。在填写了MYSQL_BIND结构并执行mysql_execute()查询后,才发觉结果为空集。其实这些操作都成功执行了(返回值为0),问题到底出在哪里呢?

后来在网上查了一下,发现可以把实际查询的语句的记录输出到LOG文件中。又改了一下程序,并留意了LOG文件中的记录,发现BLOB字段的长度有问题,好像没有变。不过我每次写的buffer_length都不一样啊。

查了一下英文手册才发现buffer_length和length好像不太一样。当length为NULL时,buffer_length可以作为长度来用。不过,改变buffer_length之后必须重新调用mysql_stmt_bind()才会对查询起作用。而length只要改变其所指向的unsigned long,就会在下一次查询起作用,不用重新调用mysql_stmt_bind()。

看来我真的错了。花了半天时间,总算把这个问题弄清楚了。