从图像到mysql的路径插入图像,然后使用php将其检索到<img/>标记中

时间:2019-02-19 22:22:24

标签: php html mysql

我试图使用php将其路径中的图像插入mysql数据库中,但我做到了,但是当我需要从mysql数据库中将图像检索到标签中时,该图像没有出现。

我的数据库

CREATE TABLE IF NOT EXISTS `tbl_images` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `name` blob NOT NULL,  
  PRIMARY KEY (`id`)  
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;  

index.php

<?php  
 $connect = mysqli_connect("localhost", "root", "", "test");  
 if(isset($_POST["insert"]))  
 {  
    $path='C:\\xampp\\htdocs\\test_img\\4.jpg';
      $query = "INSERT INTO tbl_images(name) VALUES ('LOAD_FILE($path)')";  
      if(mysqli_query($connect, $query))  
      {  
           echo '<script>alert("Image Inserted into Database")</script>';  
      }  
 } 
 
 ?>  
 <!DOCTYPE html>  
 <html>  
      <head>  
      </head>  
      <body>  
                <form method="post" enctype="multipart/form-data">  
                    <input type="submit" name="insert" id="insert" value="Insert"  />  
                </form>  
                <table >  
                <?php  
                $query = "SELECT * FROM tbl_images ";  
                $result = mysqli_query($connect, $query);  
                while($row = mysqli_fetch_array($result))  {  
                    echo '  
                        <tr>  
                            <td> <img src="data:image/jpeg;base64,'.base64_encode($row['name'] ).'" height="200" width="200" /> </td>  
                        </tr>  
                    ';  
                }  
                ?>  
                </table> 
      </body>  
 </html>  
 

编辑:插入无法正常工作。它将插入字符串LOAD_FILE(C:xampphtdocs est_img4.jpg)而不是图像本身。

1 个答案:

答案 0 :(得分:4)

BLOB columns仅能存储64KB的数据,因此任何最大的图像都会被截断并且无法显示。

如果要将它们存储在数据库中,则需要使用LONGBLOB

除非文件与MySQL服务器进程位于同一服务器上,否则您也不能使用LOAD_FILE进行插入。这并非总是如此。如果存在,那么您应该这样做:

$stmt = $connect->prepare("INSERT INTO tbl_images(name) VALUES (LOAD_FILE(?))");
$stmt->bind_param('s', $path);
$stmt->execute();

引用 path 的地方,而不是LOAD_FILE调用本身。您要插入纯字符串,并且文字"LOAD_FILE(...)"无效的图像数据。

请记住,将图像存储在数据库中通常是bad idea。而是存储对图像的引用,例如文件路径或对象存储库的URL。

您还将图像作为嵌入式data:base64数据提供,这效率极低。它不仅使传输图像所需的数据量增加了约33%,而且还意味着图像必须在每次页面加载时发送,并且无法缓存。对于移动用户,这将快速刻录数据。