解密MYSQL数据并创建CSV


Decrypt MYSQL data and create CSV

我正在使用此解决方案加密一些表单数据并将其发布到我的数据库中。在另一个页面上,我现在需要解密这些数据,并将其全部保存到一个包含多行的CSV文件中。

我的代码解密很好(当我回显$responses时,它会将所有正确的数据打印到页面上),但我无法将其加载到CSV中。这段代码创建了一个CSV,但每个字段都在一个随机的地方,并且有很多奇怪的字符。我已经尝试了以下代码的大量变体(包括将其加载到数组中),但没有成功。

$theresults = $wpdb->get_results( 
"
SELECT * 
FROM my_table
"
);
foreach ( $theresults as $result ) {
$iv = $result->iv;
$responses = openssl_decrypt($result->title,'AES-256-CBC',$encryption_key,0,$iv).",".
openssl_decrypt($result->fname,'AES-256-CBC',$encryption_key,0,$iv).",".
openssl_decrypt($result->lname,'AES-256-CBC',$encryption_key,0,$iv).",".
openssl_decrypt($result->address,'AES-256-CBC',$encryption_key,0,$iv).",".
openssl_decrypt($result->emailadd,'AES-256-CBC',$encryption_key,0,$iv).",".
openssl_decrypt($result->who,'AES-256-CBC',$encryption_key,0,$iv);
fputcsv($output, explode(',',$responses));
}

更新

因此,我通过将数据传递给变量,然后创建数组来实现这一点,如下所示:

$responses = array($title,$fname,$lname,$address,$age,$emailadd,$who);
fputcsv($output, $responses);

这将在CSV文件中插入正确的行。

我现在的问题是,数据的后缀是奇怪的字符,比如菱形、音乐符号、线条、带?在他们身上。有人知道是什么原因造成的吗?

您手动构建一个逗号分隔的字符串,然后在逗号上进行拆分。如果您的任何字段实际上包含逗号,这将中断,因为您没有转义它们。这将导致比您预期的更多的字段,并且它们将位于错误的位置。相反,只需将字段直接放入数组中,然后将该数组传递给fputcsv(),fputcsw将为您执行逗号转义。

$responses = [
    openssl_decrypt($result->title ... ),
    openssl_decrypt($result->fname ... ),
    ...
];
fputcsv($output, $responses);