如何使用 PHP 从 MYSQL 中插入和检索图像 blob?

Posted

技术标签:

【中文标题】如何使用 PHP 从 MYSQL 中插入和检索图像 blob?【英文标题】:How to insert and retrieve image blob from MYSQL using PHP? 【发布时间】:2018-06-08 08:52:35 【问题描述】:

这是mysql表db table containg blob image

我想要做的是插入一个图像并将其作为 blob 存储在“justification”中,然后检索它并将其显示在另一个页面的表中。

这是我的显示代码:

<?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  ?>

如果我从 phpMyAdmin 手动插入图像,此代码将完美运行。 但是当我使用 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));

        
        ?>

这是输出: 在第一行中,我手动插入了来自 phpMyAdmin 的图像 在第二行中,我用代码插入了相同的图像 html table displaying the 2 images

【问题讨论】:

Normal image storing or mySQL blob?的可能重复 【参考方案1】:

尝试删除“addslashes”方法调用,当使用数据库引擎处理的准备好的语句时,您不需要它。这可能是您的问题,因为添加额外字符会破坏常规图像。

如果您坚持保留“addslashes”,请尝试将数据库中的图像数据包装在“stripslashes”调用中以反转“addslashes”的效果。

所以要么:

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

或者

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

我推荐第一个选项。

【讨论】:

以上是关于如何使用 PHP 从 MYSQL 中插入和检索图像 blob?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MySQL 数据库中存储和检索图像并使用 Php 将其显示在 html 中? [复制]

jquery - 如何使用通过 AJAX 从 MySQL 和 PHP 检索的数据将图像添加到 Select2 下拉列表?

如何使用 C# 在 MYSQL 中插入和检索图像

使用“mysql_fetch_row”从数据库中检索结果并使用 PHP 和 mysqli 插入数组?

从数据库 php 和 mysql 中检索图像的损坏的文件图标

使用 PDO 问题从 MySQL 检索图像