2016-05-16 4 views
1

ich erlang-mysql-driver zum Laufen zu bringen versuchen, schaffte ich es einzurichten und Abfragen zu machen, aber es gibt zwei Dinge, die ich nicht tun kann. (https://code.google.com/archive/p/erlang-mysql-driver/issues)richtiger Weg, um (erhalten aus/Einfügen in) Tabelle mit Erlang Mysql Treiber

(BTW, ich bin neu in Erlang)

So hier ist mein Code MySQL zu verbinden.

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

1. Ich kann keine Daten aus der Tabelle abrufen.

mysql.erl enthält keine spezifischen Informationen darüber, wie Tabellendaten zu bekommen, aber das ist das weiteste, was ich gehen könnte.

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

Und das Ergebnis war:

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}]}] 

Ich verstehe, dass irgendwie muss ich das zweite Element erhalten und foreach verwenden um alle Daten zu erhalten, aber Strings werden in verschiedenen Format zurückgegeben wie abgefragt String Success aber zurückgegebener String ist <<"Success">>.

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

erste Frage lautet: Wie bekomme ich Daten aus der Tabelle?

2. Wie fügt man Werte in eine Tabelle ein, die Variablen verwenden?

Ich kann Daten in die Tabelle einfügen Verwendung dieser Methode:

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

Aber es gibt zwei Dinge, die ich Mühe habe, 1. Ich bin Daten Einfügen ohne << und >> Betreiber, denn wenn ich Msg = << ++ "Hello World" >>, erlang tun eine Ausnahme wirft (ich glaube, ich etwas falsch tue), ich weiß nicht, ob sie erforderlich sind, aber ohne sie bin ich der Lage, Daten in Tabelle stört mich außer diesen Fehler einfügen nach der Ausführung:

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}} 

zurückgegebenes Atom ist updated, während ich befahl, Daten einzufügen.
Frage 2 ist: Wie füge ich Daten in die Tabelle in einer richtigen Weise ein?

+0

Warum haben Sie diesen bestimmten mysql-Treiber gewählt? Es ist wie 2007, als Sie wahrscheinlich noch für Erlang bezahlen mussten! Ich wäre überrascht, wenn es tatsächlich funktioniert hätte, sowohl MySQL als auch Erlang hätten seither etwa ein Dutzend Versionsänderungen durchlaufen. Irgendein Grund dafür? – Amiramix

+0

Wenn Sie zwei Fragen haben, sollten Sie sie auf die beiden Fragen aufteilen. –

Antwort

1

Fehler:

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

Ihnen sagt, dass Werte zurückgegeben:

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

, die offensichtlich nicht mit entweder {data, Data} noch {A, B} mithalten können. Sie können Ihre Daten erhalten als:

<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> 
+0

Zum Paradies gehen, Danke! –