簡體   English   中英

如何從mysql輸出blob數據(不是圖像)到php?

[英]How to output blob data (not image) from mysql to php?

我試圖以BLOB格式輸出存儲在表中的加密數據,但它不起作用。 我使用預處理語句插入它,當我檢查mysql命令行客戶端時,它顯示已記錄條目,但blob字段為空,並且每個其他字段都有一些值。 此外, blob字段不能為null,因為我在創建表時已指定它,因此我認為命令行無法顯示blob字段數據。

所以使用php,我試圖返回blob字段的base64_encode值,但它沒有幫助。 它仍然是空的。 我該怎么辦?

PS:它不是圖像,而是AES-256的加密文本。

$stmt = $conn->prepare("INSERT INTO data_store (eid,  ekey, ecipher) VALUES (?, ?, ?)");
if($stmt->bind_param("sbb", $eid, $ekey, $ecipher)) {
echo "Successful";

}

// set parameters and execute
$eid=$postedID;
$ekey=$postedKey;
$ecipher=$postedCipher;

$stmt->execute();
$stmt->close();
$conn->close();

之后,我嘗試返回編碼它的BLOB值,但它不返回任何內容,而字符串id的值確實顯示出來。 我該如何解決這個問題? 我需要加密數據,然后解密它為網站明文。

我該如何實現這一目標? 非常感謝。

PS:我還沒有嘗試解密,我首先需要加密值,所以建議首先解密它不會是一個非常有用的。

該表看起來像這樣 -

+-------------+---------------------+------+-----+---------+----------------+
| Field       | Type                | Null | Key | Default | Extra          |
+-------------+---------------------+------+-----+---------+----------------+
| eid         | varchar(255)        | NO   | PRI | NULL    |                |
| ekey        | blob                | NO   |     | NULL    |                |
| ecipher     | blob                | NO   |     | NULL    |                |
+-------------+---------------------+------+-----+---------+----------------+

當我將參數更改為string “s”時問題得以解決,這似乎正常工作,因為我將數據保存到的變量是字符串,所以它適合。

所以更正的代碼是:

$stmt = $conn->prepare("INSERT INTO data_store (eid,  ekey, ecipher) VALUES (?, ?, ?)");
if($stmt->bind_param("sss", $eid, $ekey, $ecipher)) {
echo "Successful";

我並不是說這是一個完美的解決方案,但它現在似乎解決了我的問題,如果有人提出在php中使用blob而不是string的方法,我會非常有幫助。 謝謝。

指定b告訴mysqli將數據以單獨的數據包發送到服務器。

文檔在這里

但是,文檔無法詳細說明的是如何指定數據包數據。 可以假設,與其他類型一樣,您應該只設置包含數據的引用變量。 事實證明你需要使用send_long_data

使用此功能,您實際上可以控制每個數據塊,因此您需要確保不要發送太大的數據包以供服務器處理。

嘗試這樣的事情

$stmt = $conn->prepare("INSERT INTO data_store (eid,  ekey, ecipher) VALUES (?, ?, ?)");

//Initialise variables
$eid = $postedID;
$ekey = NULL;
$ecipher = NULL;

if($stmt->bind_param("sbb", $eid, $ekey, $ecipher)) {

    // Send blobs
    $ekey_chunks = str_split($postedKey, 8192);
    foreach ($ekey_chunks as $chunk) {
        $stmt->send_long_data(1, $chunk);
    }

    $ecipher_chunks = str_split($postedCipher, 8192);
    foreach ($ecipher_chunks as $chunk) {
        $stmt->send_long_data(2, $chunk);
    }

    $stmt->execute();
    $stmt->close();
}

$conn->close();

來源此博客

暫無
暫無

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

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