php - 搜索加密数据
问题描述
我有一些数据库,其中包含一堆“正常”数据以及加密的名字和姓氏。
我有一个获取该数据的 PHP 页面,并在 MySQL 语句中按姓氏对其进行排序。
然后它使用 while 循环在页面上打印信息,并且该页面还具有简单的名字/姓氏搜索。
我有两个问题不知道如何解决:
如何按姓氏对数据进行排序,MySQL 语句按姓氏排序,但由于姓氏被加密,一旦解密就会出现错误的顺序。
如何让我的搜索工作?目前,如果 post 变量 isset,它会添加到 MySQL 查询中,但同样会查询加密数据,因此不起作用。
我猜我需要取出我的数据,并将其传递到一个新数组中,同时解密名称,然后对该数组进行排序。然后我也可以将我的搜索应用到那个数组。
如果以上是正确的,我不知道该怎么做,我之前已经给出了,但我不知道如何在将数据传递到新数组时解密。我的解密函数接受两个参数,数据和加密密钥,我无法让 array_walker 工作......
我想如果我解决了第一个问题,我可以弄清楚如何搜索。
请帮忙!!
解决方案
所以我找到了一个解决方案,我不知道这是否是最好的方法,但因为我只需要搜索名称,所以我做了以下操作:
我需要保留现有的 foreach 循环遍历我的代码并打印到页面上,因此我在构建新数组的 sql 语句之后创建了一个 while 循环,也解密了我的数据:
$array_new = array();
while ($row = $result->fetch_assoc()) {
$FirstName = custom_decrypt($row["FirstName"], Key);
$LastName = custom_decrypt($row["LastName"], Key);
$array_new[] = array("Id"=>$row["Id"], "FirstName"=>$FirstName, "LastName"=>$LastName);
}
然后进行搜索,我在 $array_new[] 行之前插入了一个 if 语句,检查我的搜索表单是否已发布,然后设置一个变量/标志(如果有)并且搜索和名称变量之间存在匹配. 然后我在我的 $array_new[] 行周围包裹了一个 if 语句,这样它只有在匹配时才将该数据添加到数组中。
如果没有 post 变量,我还设置了变量/标志,因此如果没有发生搜索,它将返回所有项目。
最后,我在 while 循环之后使用以下命令对数组进行了排序:
usort($array_new, function($a, $b){ return strcmp($a["LastName"], $b["LastName"]); });
推荐阅读
- flutter - Flutter:如何创建相对于屏幕定位的小部件?
- html - Using CSS grid to replicate Mondrian painting
- objective-c - CoreData NSPredicate MATCHES 正则表达式
- powershell - Powershell 避免 cmd 8191 字符限制
- pandas - How to iterate through rows and columns in a dataframe?
- java - 如何创建一个使用数据引用保存 ArrayList 的类?
- java - Thymeleaf 下拉菜单
- sql - 如何在 IN 子句中传递变量
- probability - 决策树所需的最小训练示例数
- matlab - 图像光谱计算