首页 > 解决方案 > 搜索加密数据

问题描述

我有一些数据库,其中包含一堆“正常”数据以及加密的名字和姓氏。

我有一个获取该数据的 PHP 页面,并在 MySQL 语句中按姓氏对其进行排序。

然后它使用 while 循环在页面上打印信息,并且该页面还具有简单的名字/姓氏搜索。

我有两个问题不知道如何解决:

  1. 如何按姓氏对数据进行排序,MySQL 语句按姓氏排序,但由于姓氏被加密,一旦解密就会出现错误的顺序。

  2. 如何让我的搜索工作?目前,如果 post 变量 isset,它会添加到 MySQL 查询中,但同样会查询加密数据,因此不起作用。

我猜我需要取出我的数据,并将其传递到一个新数组中,同时解密名称,然后对该数组进行排序。然后我也可以将我的搜索应用到那个数组。

如果以上是正确的,我不知道该怎么做,我之前已经给出了,但我不知道如何在将数据传递到新数组时解密。我的解密函数接受两个参数,数据和加密密钥,我无法让 array_walker 工作......

我想如果我解决了第一个问题,我可以弄清楚如何搜索。

请帮忙!!

标签: phpmysqlarrays

解决方案


所以我找到了一个解决方案,我不知道这是否是最好的方法,但因为我只需要搜索名称,所以我做了以下操作:

我需要保留现有的 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"]); });

推荐阅读