我在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.
这个方法是正确的还是我做错了?必须有一个正确的方法从一个列表中所谓的列表中获取数据。
1条答案
按热度按时间7kjnsjlb1#
必须有一个正确的方法从一个列表中所谓的列表中获取数据
获取目标数据的正确方法是使用模式匹配来解构包含数据的任何类型的集合。因为
mysql-otp
返回与查询匹配的行列表,其中每一行本身就是一个列表,数据以列表的形式显示。因此,为了匹配列表列表,您的模式也必须是列表列表列表。作为我在erlang编写代码的第三天,我目前正在做/测试的是
好极了。
如果你知道
mysql-otp
将只返回一行,或者您只对第一行感兴趣,您可以这样简化模式:[FirstRow | _Tail] = Rows,
[_, _, UserPass, _, ...] = FirstRow.
UserPass = lists:nth(3, hd(Rows)).