二郎和 mysql

Erlang and mysql

我在 mysql 中有一个用户 table userid, username, 密码 等 使用 mysql-otp 我查询

select * from users where username = ?

其 returns ColumnNamesRows就像

[[38, <<"joe">>, <<"passwordhash">>..]]

假设我有一个散列要比较

Hash = "passhash".

作为我在 erlang 中编码的第 3 天,我目前 doing/testing 是

[[_, _, UserPass, _,..]] = Rows.

将密码存储在 UserPass.

Pass = binary_to_list(UserPass).

然后我可以比较一下

Hash == Pass.

这种方法是正确的还是我做错了? 必须有一种正确的方法从列表中应该列出的内容中获取数据。

There must be a proper way of getting data out of what is supposedly list inside a list

获取目标数据的正确方法是使用模式匹配来解构任何类型的集合包含您的数据。因为mysql-otpreturn是匹配查询的行列表,其中每一行本身就是一个列表,所以数据是列表列表的形式。因此,为了匹配列表列表,您的模式也必须是列表列表。

As its my 3rd day coding in erlang, what i am currently doing/testing is

[[_, _, UserPass, _,..]] = Rows.

太棒了。

如果您知道 mysql-otp 只会 return 一行,或者您只对第一行感兴趣,您可以像这样简化模式:

[_, _, UserPass, _, ...] = hd(Rows).

hd 是 shorthand 的头部,即列表的头部。或者,您可以像这样手动完成同样的事情:

[FirstRow | _Tail] = Rows,
[_, _, UserPass, _, ...] = FirstRow.

=======

另一种提取密码的方法:

UserPass = lists:nth(3, hd(Rows)).