2014-03-19 79 views
1

我想將我從表單中檢索到的圖像轉換爲二進制字符串,以便我可以將它插入到sqlplus表中。我在如何做到這一點的轉換環顧四周,我發現大部分的解決方案有這樣的:PHP將圖像文件轉換爲二進制字符串

示例表:

CREATE TABLE images (
    image_id int, 
    image blob 
    PRIMARY KEY (image_id)); 

表:

<form method="post" enctype="multipart/form-data" action="./Upload/UploadImage.php"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><span style="color: #FF0000;">*</span><br/> 
<input type="submit" name="uploadImage" value="Upload Image"></form> 

建議轉換解決方案:

<?php 
    $data = file_get_contents($_FILES["file"]["tmp_name"]); 
    $encoded_data = base64_encode($data); 
    //echo the data to check it's there 
    echo "Encoded Data: " . $encoded_data; 
?> 

如果我回應$data我得到一個混亂的字符串,但如果我回顯$encoded_data我只是得到:Encoded Data:然後沒有。

我希望能夠使用

$sql = 'INSERT INTO images VALUES (1, \'' . $encoded_data . '\')'; 

(我知道這只是SQL字符串插入此二進制數據到我的數據庫 - 該語句的執行是不是我覺得我需要包括)。

更新:我意識到我在我的$encoded_data = base64_encode($data);線類型,這樣的工作,但現在的SQL拋出一個字符串文字太長錯誤。

+0

我強烈建議在數據庫中存儲的圖像。 –

+1

不幸的是我需要把它作爲一個blob存儲。雖然我認識到這不現實實用。 – wenincode

+0

如果你'var_dump($ data)'?將文件存儲在數據庫中會導致數據庫和Web服務器之間的高流量 –

回答

0
$fp = fopen($_FILES['file']['tmp_name'], 'r'); 
$db_img = fread($fp, filesize($_FILES['file']['tmp_name'])); 
$db_img = addslashes($db_img); 
$db_img = base64_decode($db_img); 

然後

$sql = "INSERT INTO images VALUES (1,'$db_img')" 
相關問題