我有一个两行表,其中包含一个登录页面的ID和PIN,但是登录时,他们除了PIN外没有输入其他任何内容,因此我无法在没有找到匹配项的情况下将ID用于密码验证从他们输入的密码到存储的内容。
这里是桌子:
mysql> select * from Family;
+-----------+--------------------------------------------------------------+
| Family_ID | PIN |
+-----------+--------------------------------------------------------------+
| 1 | 1234 |
| 2 | 7777 |
| 3 | 30756 |
| 4 | 4444 |
| 5 | 2222 |
| 6 | 3333 |
| 7 | 1111 |
| 8 | 5555 |
| 9 | $2y$10$SZgvvB7WG.gXB/AUbWeIOO8HnBit6F7fG.My/Pcyi4D0zXgb3/n3G |
| 10 | 2856 |
+-----------+--------------------------------------------------------------+
10 rows in set (0.00 sec)
我正在对所有PIN进行哈希处理,并将哈希与输入的内容进行比较,我需要ID,但我不知道如何获取它。
这是我正在尝试的方法,将不断浏览,直到他们键入的内容与存储的PIN匹配或位于其中一个哈希值中为止。我不完全知道如何通过数组存储和检索结果,然后根据需要循环。我敢肯定这很简单,但我一无所知。
//boolean to see if PIN is in hash, wont work without a username to begin with
$PIN= $_POST['PIN'];
$result = mysql_query("SELECT PIN FROM Family");
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { //fetch all PINs from DB and store in array
if( $flag = password_verify($PIN, $row[])){ //$row = the PIN from the query result
} // boolean to see if PIN is in hash
}
$row
是一个数组,每个数字索引对应于查询中的列位置。在这种情况下,PIN为$row[0]
。
您确定此设计是正确的吗? PIN保证是唯一的(如果是,则您的数据库约束与此匹配)?