Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解密MYSQL数据并创建CSV_Php_Mysql_Csv_Encryption - Fatal编程技术网

Php 解密MYSQL数据并创建CSV

Php 解密MYSQL数据并创建CSV,php,mysql,csv,encryption,Php,Mysql,Csv,Encryption,我正在使用该解决方案加密一些表单数据并将其发布到我的数据库中。在一个单独的页面上,我现在需要解密该数据并将其全部保存到一个包含多行的CSV文件中 我的代码解密很好(当我回显$responses时,它会将所有正确的数据打印到页面),但我无法将其加载到CSV。这段代码创建了一个CSV,但每个字段都位于一个随机位置,并且有大量的奇数字符。我尝试了以下代码的各种变体(包括将其加载到数组中),但没有成功 $theresults = $wpdb->get_results( " SELECT * F

我正在使用该解决方案加密一些表单数据并将其发布到我的数据库中。在一个单独的页面上,我现在需要解密该数据并将其全部保存到一个包含多行的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(),它将为您进行逗号转义

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

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

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

因此,您在$responses中有一个正确的csv,但无法将其正确写入磁盘?“每个字段都位于随机位置”-您是否试图说您得到的是随机字符,而不是您期望的字符?如果是这样,您使用了错误的加密方法、错误的密钥或错误的编码。这是如何加密的?你能给我们看一下代码吗?什么是
$output
?我在代码中没有看到它的定义。我的输出是$output=fopen('php://output","w",;因此,您在$responses中有一个正确的csv,但无法将其正确写入磁盘?“每个字段都位于随机位置”-您是否试图说您得到的是随机字符,而不是您期望的字符?如果是这样,您使用了错误的加密方法、错误的密钥或错误的编码。这是如何加密的?你能给我们看一下代码吗?什么是
$output
?我在代码中没有看到它的定义。我的输出是$output=fopen('php://output","w",;谢谢,我以后会试一试:)这对我不起作用,我尝试了很多方法将它加载到数组中,每次都会出错,我甚至没有收到错误,只是一个白色页面,甚至删除了我所有的回音。我可以回显数据,并尝试将其加载到变量中,但一旦我尝试将其放入数组中,它就会崩溃!如果您的PHP太旧,您将无法使用短数组语法
[1,2,3]
,您必须使用旧式
数组(1,2,3)
。您还可以从命令行在源文件上运行
php-l file.php
,它将执行语法检查,并告诉您是否有明显错误。谢谢Alex,array()工作正常。我已经更新了我上面的帖子,我现在的CSV中有一些奇怪的符号问题…谢谢,我稍后会尝试:)这对我不起作用,我尝试了很多方法将它加载到数组中,但每次都会出错,我甚至没有收到错误,只是一个白色页面,甚至删除了我所有的回音。我可以回显数据,并尝试将其加载到变量中,但一旦我尝试将其放入数组中,它就会崩溃!如果您的PHP太旧,您将无法使用短数组语法
[1,2,3]
,您必须使用旧式
数组(1,2,3)
。您还可以从命令行在源文件上运行
php-l file.php
,它将执行语法检查,并告诉您是否有明显错误。谢谢Alex,array()工作正常。我已经更新了我上面的帖子,我只是有一些奇怪的问题,在我的CSV现在奇怪的符号。。。