gpt4 book ai didi

php - 在将结果返回到应用程序的其余部分之前更改 Mysqli_result

转载 作者:行者123 更新时间:2023-11-29 10:53:21 25 4
gpt4 key购买 nike

我有大约 75 个 php 现有脚本可以访问 mysql 数据库,类似于此伪代码:

$query="SELECT * from table";
$result=mysqli_query($conn,$query);
if (mysqli_num_rows($result)) {
while($row=mysqli_fetch_assoc($result)) {
//use the rows
}
}

我最近被迫单独加密所有数据库字段,所以现在当这 75 个 php 脚本如上所示运行时,所有 $row 都会返回,所有字段都已加密,因此无法使用。

因此,我不想更改所有 75 个 php 脚本来解码每个字段,而是想创建一个执行 mysqli_query 的函数,然后解密所有字段,并返回结果,就好像它是由 mysqli_query 返回的一样,但已解密。类似的东西

function QueryAndDecrypt($conn,$query){
$result=mysqli_query($conn,$query);
if (mysqli_num_rows($result)) {
while($row=mysqli_fetch_assoc($result)) {
$row=decrypt($row);
}
}
return $result; <<----- return result with fields decrypted
}

// now all 75 scripts would have to change just one line to call above

$query="SELECT * from table";
$result=QueryAndDecrypt($conn,$query); <<--- change only 1 line
if (mysqli_num_rows($result)) {
while($row=mysqli_fetch_assoc($result)) {
//use the rows as normal decrypted
}
}

如您所见,我只想更改所有 75 个脚本中的一行,以便它执行与以前相同的操作,并且返回的结果中所有字​​段都已解密。

我尝试编写这个 QueryAndDecrypt 函数,但是当我更改 mysqli_result $row 的结果(如上所示)时,它不会更改,因为 mysql 的结果是某种不可更改的集合(我被告知),或者类似的东西.

那么有没有办法通过编写一个通用函数来做到这一点,该函数可以从执行 sql 查询的所有脚本中调用,并且还可以以一种可以像常规脚本一样被所有其他脚本访问的方式解密结果。 mysql查询结果?

任何人都可以帮忙吗,我“刚下船”,所以我不太了解 sql 或 php,我现在非常绝望,因为所有脚本都因此而损坏!!

谢谢

最佳答案

抱歉,您无法修改结果的行,然后以某种方式将它们“取消提取”回要再次提取的结果中。

但是您可以通过更改一行来修复代码:

$query = "SELECT * from table";
$result = mysqli_query($conn,$query);
if (mysqli_num_rows($result)) {
while ($row = MyFetchAssocAndDecrypt($result)) { <<--- change only 1 line
//use the rows as normal decrypted
}
}

你必须编写像这样的函数:

function MyDecrypt(&$item, $key) {
$item = openssl_decrypt($item, OPENSSL_CIPHER_AES_256_CBC, MY_SECRET_KEY);
}

function MyFetchAssocAndDecrypt($conn, $result){
$row = mysqli_fetch_assoc($conn, $result);
array_walk($row, 'MyDecrypt');
return $row; <<----- return row with fields decrypted
}

PS:您提到了不应该通过网络将未加密的数据发送到数据库的要求。这不是我关心的问题,因为您可以使用 VPN 或通过 SSL 连接到数据库。

更令人担忧的是,包含您的明文数据和明文加密密码的查询将被写入MySQL服务器上的数据库日志中,而这些日志并未加密。

MySQL 有一些可选的扩展, promise 进行完整数据库加密,但这些扩展忽略了查询日志。

关于php - 在将结果返回到应用程序的其余部分之前更改 Mysqli_result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43382027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com