erlang和mysql

iugsix8n  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(307)

我在mysql中有一个users表,其中包含userid、username、password等,使用mysql otp进行查询

select * from users where username = ?

它返回列名和行。排成一排

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

假设我要比较一个哈希

Hash = "passhash".

作为我在erlang编写代码的第三天,我目前正在做/测试的是

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

它将密码存储在userpass中。

Pass = binary_to_list(UserPass).

我可以比较一下

Hash == Pass.

这个方法是正确的还是我做错了?必须有一个正确的方法从一个列表中所谓的列表中获取数据。

7kjnsjlb

7kjnsjlb1#

必须有一个正确的方法从一个列表中所谓的列表中获取数据
获取目标数据的正确方法是使用模式匹配来解构包含数据的任何类型的集合。因为 mysql-otp 返回与查询匹配的行列表,其中每一行本身就是一个列表,数据以列表的形式显示。因此,为了匹配列表列表,您的模式也必须是列表列表列表。
作为我在erlang编写代码的第三天,我目前正在做/测试的是

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

好极了。
如果你知道 mysql-otp 将只返回一行,或者您只对第一行感兴趣,您可以这样简化模式:

[_, _, UserPass, _, ...] = hd(Rows).
``` `hd` 是head的缩写,即列表的头。或者,你可以像这样用手来完成同样的事情:

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

=======
另一种提取密码的方法:

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

相关问题