2017-12-27 26 views
-3

이것은 mysql 테이블 db table containg blob imagePHP를 사용하여 MYSQL에서 이미지 BLOB를 삽입 및 검색하는 방법은 무엇입니까?

입니다. 이미지를 삽입하고 'justification'에 blob로 저장 한 다음 검색하여 다른 페이지의 테이블에 표시하는 것입니다. 내가 phpMyAdmin을 수동으로 이미지를 삽입하는 경우

<?php 

    while ($row = $rep->fetch()) { //$row contains the previous table's data 
    $image = $row['justification']; //justification is the blob image 
    $encoded_image = base64_encode($image); ?> 
    <tr> 
     <td><?php echo $row['ncarte']; ?></td> 
     <td><?php echo $row['module']; ?></td> 
     <td><?php echo $row['type']; ?></td> 
     <td><?php echo $row['dateabs']; ?></td> 
     <td><?php echo "<a href='data:image/png;base64,{$encoded_image}' download> <img height='30px' src='data:image/png;base64,{$encoded_image}'> </a>";?> </td> 
    </tr> 
    <?php } ?> 

이 코드는 완벽하게 작동합니다 :

이 그것을 표시하는 내 코드입니다. 하지만 PHP로 데이터베이스에 이미지를 삽입하면 이미지가 나타나지 않습니다.

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" > 
     <label for="module" >Module :</label> 
     <select name="module"> 
      <?php foreach ($module as $mod) { ?> 
      <option value="<?php echo $mod; ?>" > <?php echo $mod; ?> </option> 
      <?php } ?> 
     </select> 
     <br> 
     <label for="type" >type :</label> 
     <select name="type"> 
      <?php foreach ($type as $ty) { ?> 
      <option value="<?php echo $ty; ?>" > <?php echo $ty; ?> </option> 
      <?php } ?> 
     </select> 
     <br> 
     <label for="date" >Date :</label> 
     <select name="date"> 
      <?php foreach ($date as $dat) { ?> 
      <option value="<?php echo $dat; ?>" > <?php echo $dat; ?> </option> 
      <?php } ?> 
     </select> 
     <br> 
     <input type="file" name="image"/> 
     <br> 
     <input type="submit" name="submit"/> 
    </form> 

    <?php 
    if(count($_FILES) > 0) { 
     if(is_uploaded_file($_FILES['image']['tmp_name'])) { 
      $date_of_abs = $_POST['date']; 
      $type_of_abs = $_POST['type']; 
      $module_of_abs = $_POST['module']; 
      $imgData =addslashes(file_get_contents($_FILES['image']['tmp_name'])); 
      $sql = $bdd->prepare("UPDATE abs SET justification=? WHERE ncarte=? and module=? and type=? and dateabs =?"); 
      $sql->execute(array(,$imgData,$_SESSION['etudiant'],$module_of_abs,$type_of_abs,$date_of_abs)); 

     }} 
     ?> 

이 출력된다 : 난 코드

+0

[일반 이미지 저장 또는 mySQL blob?] (https://stackoverflow.com/questions/2218537/normal-image-storing-or-mysql-blob)의 가능한 복제본 – Rushikumar

답변

0

'addslashes'방법 호출을 제거 시도 html table displaying the 2 images와 같은 이미지를 삽입 번째 행에 phpMyAdmin 수동 에서 이미지를 삽입 첫번째 행 , DB 엔진이 준비된 문을 사용할 때 필요하지 않습니다. 여분의 문자를 추가하면 일반 이미지가 손상 될 수 있으므로 문제가 될 가능성이 큽니다.

'addslashes'를 유지하려는 경우 데이터베이스의 이미지 데이터를 'addslashes'에서 되돌리기 위해 'stripslashes'호출로 래핑 해보십시오.

그래서 중 하나

$imgData = file_get_contents($_FILES['image']['tmp_name']); 

또는

$encoded_image = base64_encode(stripslashes($image)); 

나는 첫 번째 옵션을 권장합니다.