簡體   English   中英

從PHP中的mysql表將加密記錄導出到csv文件失敗

[英]Exporting encrypted record to csv file from mysql table in PHP fails

我有一個PHP頁面,該頁面從SQL表中選擇記錄,然后將記錄的加密版本發送到CSV文件。 我的問題是:當我選擇未使用openssl加密的記錄時,它會成功導出,但是,如果我包含加密,它將打開一個空白屏幕。

我希望這里能有所幫助。 提前謝謝了

This is my code:

  <?php

    // Database Connection
    require("xxx.php");
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'))
    $encryption_key = 'bRuD5WYw5wd0rdHR9yLlM6wt2vteuiniQBqE70nAuhU=';

     $result='select   *
            from encrypt';


            $file='grade/file'.date('YmdDH_i_s').'.csv';
            $qry = "select * from gb_centre where use_flag=1";
            $rs = mysqli_query($con,$qry);
            $getRowAssoc = mysqli_fetch_assoc($rs);
    $query = (
        openssl_encrypt($result->uniqueid,'AES-256-CBC',$encryption_key,0,$iv),
        openssl_encrypt($result->username,'AES-256-CBC',$encryption_key,0,$iv),
    openssl_encrypt($result->shortname,'AES-256-CBC',$encryption_key,0,$iv),
    openssl_encrypt($result->rawgrade,'AES-256-CBC',$encryption_key,0,$iv),
    openssl_encrypt($result->finalgrade,'AES-256-CBC',$encryption_key,0,$iv),
    openssl_encrypt($result->cid,'AES-256-CBC',$encryption_key,0,$iv),
    openssl_encrypt($result->id,'AES-256-CBC',$encryption_key,0,$iv)

    );


    if (!$result = mysqli_query($con, $query)) {
        exit(mysqli_error($con));
    }

    $users = array($uniqueid,$username,$shortname,$rawgrade,$finalgrade,$cid,$id);
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $users[] = $row;
        }
    }

    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename='.$getRowAssoc['cid'].date('_Y-m-d_Hi').'.csv');
    $output = fopen('php://output', 'w');
    fputcsv($output, array('a1', 'a2', 'a3', 'a4', 'a5','a6','a7'));

    if (count($users) > 0) {
        foreach ($users as $row) {
            fputcsv($output, $row);
        }
    }

    ?>

**

編輯

**我已經編輯了代碼部分,它現在可以使用PHP OpenSSL將記錄導出到csv並可以正常工作,問題是,它在CSV文件中添加了額外的列。 我不知道錯誤在哪里。 這是編輯后的代碼:

<?php
// Database Connection
require("config.php");
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$key = 'bRuD5WYw5wd0rdHR9yLlM6wt2vteuiniQBqE70nAuhU=';
$encryption_key = 'bRuD5WYw5wd0rdHR9yLlM6wt2vteuiniQBqE70nAuhU=';
$string='select   *
        from encrypt'
$qry = "select * from gb_centre where use_flag=1";
        $rs = mysqli_query($con,$qry);
        $getRowAssoc = mysqli_fetch_assoc($rs);
if (!$result = mysqli_query($con, $string)) {
    exit(mysqli_error($con));
}


if (mysqli_num_rows($result) > 0) {
    while ($row = mysqli_fetch_assoc($result)) {

        $uniqueid[] = openssl_encrypt($row->uniqueid,'AES-256-CBC',$encryption_key,0,$iv);
    $username[] = openssl_encrypt($row->username,'AES-256-CBC',$encryption_key,0,$iv);
    $shortname[] = openssl_encrypt($row->shortname,'AES-256-CBC',$encryption_key,0,$iv);
    $rawgrade[] = openssl_encrypt($row->rawgrade,'AES-256-CBC',$encryption_key,0,$iv);
    $finalgrade[] = openssl_encrypt($row->finalgrade,'AES-256-CBC',$encryption_key,0,$iv);
    $cid[] = openssl_encrypt($row->cid,'AES-256-CBC',$encryption_key,0,$iv);
    $id[] = openssl_encrypt($row->id,'AES-256-CBC',$encryption_key,0,$iv);
    }
}
$users = array($uniqueid,$username,$shortname,$rawgrade,$finalgrade,$cid,$i);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$getRowAssoc['cid'].date('_Y-m-d_Hi').'.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('a1', 'a2', 'a3', 'a4', 'a5','a6','a7'));

if (count($users) > 0) {
    foreach ($users as $row1) {
        fputcsv($output, $row1);
    }
}

?>

看起來您在執行查詢的基礎方面遇到了困難。 我只是編寫一些簡單的代碼來獲取並顯示單個查詢的結果。 然后,當您有了主意時,可以在代碼中添加更多內容。

這是一個使用預准備語句的示例。 這將防止sql注入。 您應該學習如何將准備好的語句用於以后的所有查詢。 這里是一個很好的資源鏈接,它將教您如何正確執行所需的任何查詢。 將此鏈接添加為書簽並經常引用。 MySQLi預備語句

此代碼將從查詢返回的結果的每一行中打印出唯一標識。

$query = "SELECT * 
FROM gb_centre 
WHERE use_flag = ?";

$stmt = $con->prepare($query);
$stmt->bind_param('i', 1); //set your bindings
$stmt->execute();
while ($result = $stmt->fetch_object()) {

  echo $result->uniqueid . '<br>';

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM