我尝试在准备好的语句中调用带有二进制参数的过程。但它在所有情况下都失败了。
我可以在网上找到的所有示例都与输出二进制值有关,而不是与输入值有关。
我能怎么做 ?
提前致谢。
一个非常简单的程序:
CREATE PROCEDURE `testVarsGet2` (
IN i_ulv BINARY(12),
OUT o_cnt INT(11),
OUT o_errno INT(11))
testVarsGet2:BEGIN
DECLARE t_ulv BINARY(12);
select `ulv` into t_ulv from `testVars` where `ulv` =i_ulv;
IF ROW_COUNT() = 0 THEN
SET o_errno = -1002;
LEAVE testVarsGet2;
END IF;
select `cnt` into o_cnt from `testVars` where `ulv` = i_ulv;
SET o_errno = 0;
LEAVE testVarsGet2;
END;
如果 ulv 没问题, o_errno = 0 ,如果不是 o_errno =- 1002
命令行 :
mysql> call testVarsGet2 (0x7124A57EF08100010000DF3F,@cnt , @err); select @cnt, @err;
Query OK, 1 row affected (0.00 sec)
+------+------+
| @cnt | @err |
+------+------+
| 1 | 0 |
+------+------+
1 row in set (0.00 sec)
或者
mysql> call testVarsGet2 (unhex('7124A57EF08100010000DF3F'),@cnt , @err); select @cnt, @err;
Query OK, 1 row affected (0.00 sec)
+------+------+
| @cnt | @err |
+------+------+
| 1 | 0 |
+------+------+
1 row in set (0.00 sec)
但是在 C/C++ 程序中,如果我使用语句,它会失败
mysql_stmt_prepare(stmt, "call testVarsGet2 ( unhex(?), ? , ?)", strlen(..));
with
const char * value = "7124A57EF08100010000DF3F"
len = 24;
bind[0].buffer_type = MYSQL_TYPE_STRING;
bind[0].buffer = (char *)value;
bind[0].buffer_length = 32;
bind[0].is_null= 0;
bind[0].length= &len;
或者
mysql_stmt_prepare(stmt, "call testVarsGet2 ( ?, ? , ?)", strlen(..));
value = "0x7124A57EF08100010000DF3F"
或具有二进制值
const char * value = "7124A57EF08100010000DF3F"
len = 12
unsigned char * value_bin = hex2bin (value );
bind[0].buffer_type = MYSQL_TYPE_BLOB;
bind[0].buffer = (char *)value_bin;
bind[0].buffer_length = 12;
bind[0].is_null= 0;
bind[0].length= &len;
在所有情况下,我都会得到 o_errno = -1002
如何传递二进制值????
先感谢您。