準備済みステートメントでバイナリー・パラメーターを使用してプロシージャーを呼び出そうとしています。しかし、それはすべての場合に失敗します。
私がウェブ上で見つけることができるすべての例は、決して入力値ではなく、出力バイナリ値に関連しています。
どのようにできるのか ?
前もって感謝します。
非常に簡単な手順:
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 が OK なら 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 を取得します
バイナリ値を渡す方法????
前もって感謝します。