【问题标题】:Proper way to (get from /insert into) table using Erlang Mysql Driver使用 Erlang Mysql 驱动程序(从/插入到)表的正确方法
【发布时间】:2016-09-12 04:37:55
【问题描述】:

我试图让erlang-mysql-driver 工作,我设法设置它并进行查询,但有两件事我不能做。(https://code.google.com/archive/p/erlang-mysql-driver/issues)

(顺便说一句,我是 Erlang 新手)

这是我连接MySQL的代码。

<erl>
out(Arg) -> 
            mysql:start_link(p1, "127.0.0.1", "root", "azzkikr", "MyDB"),
            {data, Result} = mysql:fetch(p1, "SELECT * FROM messages").
</erl>

1。我无法从表中获取数据。

mysql.erl 不包含有关如何获取表数据的任何具体信息,但这是我能做到的最远的。

        {A,B} = mysql:get_result_rows(Result),
        B.

结果是这样的:

ERROR erlang code threw an uncaught exception:
 File: /Users/{username}/Sites/Yaws/index.yaws:1
Class: error
Exception: {badmatch,[[4,0,<<"This is done baby!">>,19238],
                      [5,0,<<"Success">>,19238],
                      [6,0,<<"Hello">>,19238]]}
Req: {http_request,'GET',{abs_path,"/"},{1,1}}
Stack: [{m181,out,1,
              [{file,"/Users/{username}/.yaws/yaws/default/m181.erl"},
               {line,18}]},
        {yaws_server,deliver_dyn_part,8,
                     [{file,"yaws_server.erl"},{line,2818}]},
        {yaws_server,aloop,4,[{file,"yaws_server.erl"},{line,1232}]},
        {yaws_server,acceptor0,2,[{file,"yaws_server.erl"},{line,1068}]},
        {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,240}]}]

我知道我需要以某种方式获取第二个元素并使用 foreach 来获取每个数据,但字符串以不同的格式返回,例如查询的字符串是Success,但返回的字符串是&lt;&lt;"Success"&gt;&gt;

{badmatch,[[4,0,<<"This is done baby!">>,19238],
                      [5,0,<<"Success">>,19238],
                      [6,0,<<"Hello">>,19238]]}

第一个问题是:如何从表中获取数据?

2。如何使用变量向表中插入值?

我可以使用这种方法将数据插入表中:

    Msg = "Hello World",
    mysql:prepare(add_message,<<"INSERT INTO messages (`message`)  VALUES (?)">>),
    mysql:execute(p1, add_message, [Msg]).

但是有两件事我遇到了麻烦, 1. 我在没有&lt;&lt;&gt;&gt; 运算符的情况下插入数据,因为当我执行Msg = &lt;&lt; ++ "Hello World" &gt;&gt;, 时,erlang 会抛出异常(我认为我做错了什么),我不知道是否需要它们但没有它们我可以将数据插入表中,但执行后此错误困扰我:

yaws code at /Users/{username}/Yaws/index.yaws:1 crashed or ret bad val:{updated,
                                                                                 {mysql_result,
                                                                                  [],
                                                                                  [],
                                                                                  1,
                                                                                  []}} 
Req: {http_request,'GET',{abs_path,"/"},{1,1}}

当我命令插入数据时,返回的原子是 updated
问题2是:如何正确插入数据到表中?

【问题讨论】:

  • 你为什么选择这个特定的mysql驱动程序?从 2007 年开始,您可能仍然需要为 Erlang 付费!如果它真的有效,我会感到惊讶,从那时起 MySQL 和 Erlang 都经历了十几个版本更改。有什么理由吗?
  • 如果你有两个问题,你应该把它们分成两个问题。

标签: mysql erlang


【解决方案1】:

错误:

{badmatch,[[4,0,<<"This is done baby!">>,19238],
                      [5,0,<<"Success">>,19238],
                      [6,0,<<"Hello">>,19238]]}

告诉你返回值是:

[[4,0,<<"This is done baby!">>,19238],
 [5,0,<<"Success">>,19238],
 [6,0,<<"Hello">>,19238]]

这显然不能与{data, Data}{A, B} 匹配。您可以通过以下方式获取数据:

<erl>
out(Arg) -> 
    mysql:start_link(p1, "127.0.0.1", "root", "azzkikr", "MyDB"),
    {ehtml,
     [{table, [{border, "1"}],
       [{tr, [],
         [{td, [],
           case Val of
               _ when is_binary(Val) -> yaws_api:htmlize(Val);
               _ when is_integer(val) -> integer_to_binary(Val)
           end}
          || Val <- Row
         ]}
        || Row <- mysql:fetch(p1, "SELECT * FROM messages")
       ]}
     ]
    }.
</erl>

【讨论】:

  • 去天堂,谢谢!
猜你喜欢
  • 2018-06-26
  • 1970-01-01
  • 2014-09-01
  • 2013-07-03
  • 2017-11-05
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多