2014-03-13 20 views
2

我有一個在數據庫中插入圖像的問題。 該表具有以下結構:插入/從MySQL數據庫查看圖像

  • ID-> INT(3) - >自動增量
  • 名稱 - > VARCHAR(30)
  • 擴展 - > VARCHAR(10)[也許太短]
  • img-> MEDIUMBLOB

該插入圖像,PHP代碼:

if($_FILES['file']['error']==0){ 
     $result = is_uploaded_file($_FILES['file']['tmp_name']); 
     if(!$result){ 
      echo "Upload failed"; 
     }else{ 
      $type = explode("/", $_FILES['file']['type']); 
      $extension = $type[1]; 

      $name = $_FILES['file']['name']; 
      $img = $_FILES['file']['tmp_name']; 
      $img = file_get_contents($_FILES['file']['tmp_name']); 
      $img = addslashes ($img); 
     } 

     $sql = "INSERT INTO images (name, extension, img) VALUES ('$name', '$extension', '$img')"; 
     $result = $mysqli->query($sql); 
     if($result){ 
      echo "insertion was successful"; 
     }else{ 
      echo "insertion failed: ".$mysqli->error; 
     } 

而且這是我嘗試看看IMG:

$sql = "SELECT name, extension, img FROM images WHERE id='1'"; 
$result = $mysqli->query($sql); 
if($result){ 
    $a = $result->fetch_assoc(); 
    header ("Content-type: image/".$a['estensione']); 
    echo $a['img']; 

}else{ 
    echo "AAAAAAAAA<hr>"; 
    echo $mysqli->error; 
} 

插入是好的,但我不能查看圖像。 另外,還有另一種上傳圖片的方式嗎?

+0

請注意,INT「(3)」並不意味着什麼 - 至少不在這方面 – Strawberry

+0

我不會將圖像存儲到數據庫,檢查[答案](http://stackoverflow.com/questions/561447/存儲圖片作爲文件或在數據庫中的Web應用程序)。 – skywalker

+0

同意你的草莓,但我必須這樣做 –

回答

1

首先在圖像標記示例(您想顯示結果的頁面)

在標籤中獲取圖像從fetch_image_frm_db.php頁,並顯示

<img src="fetch_image_frm_db.php?id=<?php echo $id_of_row;?>"/> 

fetch_image_frm_db.php頁

$id=$_GET['id']; 

$query = "SELECT * FROM images WHERE id=$id"; 

$result=mysql_query($query) or die('Error, query failed'.mysql_error()); 
$row=mysql_fetch_array($result); 

header("Content-type:image/jpeg"); 
stripslashes ($row['img']); 

echo $row['img']; 

* *存儲在數據庫的圖像是不是好的做法

0

我認爲你拼錯擴展代碼中的第5行:

$sql = "SELECT name, extension, img FROM images WHERE id='1'"; 
$result = $mysqli->query($sql); 
if($result){ 
    $a = $result->fetch_assoc(); 
    header ("Content-type: image/".$a['extension']); 
    echo $a['img']; 

}else{ 
    echo "AAAAAAAAA<hr>"; 
    echo $mysqli->error; 
} 
+0

爲什麼拼錯? $ a ['extension']是從$ _FILES ['file']中的圖像屬性類型的擴展,在這種情況下是jpeg。 我也嘗試在db中插入所有圖像類型的字符串(所以deletedet命令爆炸)。存儲在數據庫中的值現在是「image/jpeg」,並修改了輸出頁面:「header('Content-type:'。$ a ['extension']。 –

0

OK我以這種方式解決...... 爲索引頁面的代碼是:

<?php 
    $mysqli = new mysqli("127.0.0.1","root","root","prova"); 
    if($mysqli->connect_errno){ 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
    } 

if(isset($_POST['submit'])){ 
if(isset($_FILES['file'])){ 
    if($_FILES['file']['error']==0){ 
     $result = is_uploaded_file($_FILES['file']['tmp_name']); 
     if(!$result){ 
      echo "Impossibile eseguire l'upload"; 
     }else{ 
      $type = $_FILES['file']['type']; 
      $nome = $_FILES['file']['name']; 
      $img = file_get_contents($_FILES['file']['tmp_name']); 
      $img = addslashes ($img); 

     } 

     $sql = "INSERT INTO immagini (nome, estensione, img) VALUES ('$nome', '$type', '$img')"; 
     $result = $mysqli->query($sql); 
     if($result){ 
      echo "Insertion was succesfully executed"; 
     }else{ 
      echo "Insertion failed: ".$mysqli->error; 
     } 
    } 

} 
} 
    echo "<br><br><hr>"; 
    $query = "SELECT * FROM immagini"; 

    $result=$mysqli->query($query) or die('Error, query failed'.mysql_error()); 

    while($row = mysqli_fetch_array($result)){ 
     echo "<p><img height='250' width='250' src=\"fetch_img.php?id=$row[id]\">"; 
    } 

?> 

這是腳本fetch_img.php,taht有效地打印圖像:

<?php 
    $mysqli = new mysqli("127.0.0.1","root","root","prova"); 
    if($mysqli->connect_errno){ 
     echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
    } 

    if($_GET['id']==""){ 
     header("Location: index.php"); 
    } 

    $id=$_GET['id']; 

    $query = "SELECT * FROM immagini WHERE id=$id"; 

    $result=$mysqli->query($query) or die('Error, query failed'.mysql_error()); 
    //var_dump($result); 
    $row= $result->fetch_assoc(); 

    header("Content-type: image/jpeg"); 
    $rs_immagine=imagecreatefromstring($row['img']); 
    imagejpeg($rs_immagine, null, 100); 
    imagedestroy($rs_immagine); 

?> 

感謝所有,也建議,存儲文件,愛斯佩克在圖像中,數據庫不會被重新採集......我是第一個這樣說的人,但我必須這樣做。