[英]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.