错误解析结果odbc查询
Error parse result odbc query
我有这个代码:
case catch ejabberd_odbc:sql_query(
Server,
["select COUNT(*) as total from users "
"where username='", IdUsername, "'"]) of
{selected, [<<"total">>], [{Totale}]} ->
io:format(Totale);
_ ->
io:format("err")
end,
但总是打印 "err" 到控制台,但如果我使用这个:
Result = ejabberd_odbc:sql_query(Server, ["select COUNT(*) as total from users where username='", IdUsername, "';"]),
io:format(Result),
我有这个输出:
{badarg,[{io,format,[<0.42.0>,{selected,[<<"total">>],[[<<"1">>]]},[]], []},{mod_http_offline,create_message,3,[{file,"mod_http_offline.erl"}, {line,35}]},{ejabberd_hooks,safe_apply,3,[{file,"src/ejabberd_hooks.erl"}, {line,382}]},{ejabberd_hooks,run1,3,[{file,"src/ejabberd_hooks.erl"}, {line,329}]},{ejabberd_sm,route,3,[{file,"src/ejabberd_sm.erl"}, {line,111}]},{ejabberd_local,route,3,[{file,"src/ejabberd_local.erl"}, {line,112}]},{ejabberd_router,route,3,[{file,"src/ejabberd_router.erl"}, {line,75}]},{lists,foreach,2,[{file,"lists.erl"},{line,1336}]}]}
我在哪里可以看到这个:
{selected,[<<"total">>],[[<<"1">>]]}
如果我在一个案例中使用 "total" 而不是 <<"total">> 也会出现同样的错误,那么问题是什么?我怎样才能得到 int 号码?
您的模式匹配是:
{selected, [<<"total">>], [{Totale}]}
您要匹配的字词是:
{selected,[<<"total">>],[[<<"1">>]]}
也就是说,该元组中的第三个元素是一个列表,其中包含一个包含二进制的列表,但您匹配的是一个包含元组的列表。
您可以通过在所需值所在的位置放置一个变量名来获取该值,如下所示:
{selected,[<<"total">>],[[Totale]]}
将二进制赋值给变量Totale
。要将其转换为整数,请使用 binary_to_integer/1
:
Count = binary_to_integer(Totale)
我有这个代码:
case catch ejabberd_odbc:sql_query(
Server,
["select COUNT(*) as total from users "
"where username='", IdUsername, "'"]) of
{selected, [<<"total">>], [{Totale}]} ->
io:format(Totale);
_ ->
io:format("err")
end,
但总是打印 "err" 到控制台,但如果我使用这个:
Result = ejabberd_odbc:sql_query(Server, ["select COUNT(*) as total from users where username='", IdUsername, "';"]),
io:format(Result),
我有这个输出:
{badarg,[{io,format,[<0.42.0>,{selected,[<<"total">>],[[<<"1">>]]},[]], []},{mod_http_offline,create_message,3,[{file,"mod_http_offline.erl"}, {line,35}]},{ejabberd_hooks,safe_apply,3,[{file,"src/ejabberd_hooks.erl"}, {line,382}]},{ejabberd_hooks,run1,3,[{file,"src/ejabberd_hooks.erl"}, {line,329}]},{ejabberd_sm,route,3,[{file,"src/ejabberd_sm.erl"}, {line,111}]},{ejabberd_local,route,3,[{file,"src/ejabberd_local.erl"}, {line,112}]},{ejabberd_router,route,3,[{file,"src/ejabberd_router.erl"}, {line,75}]},{lists,foreach,2,[{file,"lists.erl"},{line,1336}]}]}
我在哪里可以看到这个:
{selected,[<<"total">>],[[<<"1">>]]}
如果我在一个案例中使用 "total" 而不是 <<"total">> 也会出现同样的错误,那么问题是什么?我怎样才能得到 int 号码?
您的模式匹配是:
{selected, [<<"total">>], [{Totale}]}
您要匹配的字词是:
{selected,[<<"total">>],[[<<"1">>]]}
也就是说,该元组中的第三个元素是一个列表,其中包含一个包含二进制的列表,但您匹配的是一个包含元组的列表。
您可以通过在所需值所在的位置放置一个变量名来获取该值,如下所示:
{selected,[<<"total">>],[[Totale]]}
将二进制赋值给变量Totale
。要将其转换为整数,请使用 binary_to_integer/1
:
Count = binary_to_integer(Totale)