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()。

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值