php - 使用 blob 数据类型从 mysql php 显示图像时出错

标签 php mysql blob

我正在尝试使用 php 显示我的 mysql 数据库中的图像。图像未完全显示。它在尝试显示超过 200 kb 的图像时被剪切(通过试验确定,但不太确定)。

HTML代码:

<form enctype="multipart/form-data" action="insertimage.php" method="post" name="changer">
<input name="MAX_FILE_SIZE" value="10240000" type="hidden">
<input name="image" accept="image/jpeg|image/jpg|image|JPG|image/png|image/gif" type="file">
<input value="Submit" type="submit">

PHP 代码:

<?php
    require('myconnect.php');
    
    if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 
    
              // Temporary file name stored on the server
              $tmpName  = $_FILES['image']['tmp_name'];  
               
              // Read the file 
              $fp     = fopen($tmpName, 'r');
              $data = fread($fp, filesize($tmpName));
              $data = addslashes($data);
              fclose($fp);
              
    
              // Create the query and insert
              // into our database.
              $query = "Update whyangry.posts set Photo='$data' where Pid=2";
              $results = mysql_query($query, $con);
              
              // Print results
              print "Thank you, your file has been uploaded.";
               
    $sql = "SELECT * FROM helpme.posts WHERE Pid=2";
    $res = mysql_query($sql,$con);
    while ($res1=mysql_fetch_assoc($res))
    {   
    $content = $res1['Photo'];
    $id=$res1['Pid'];
    
    }
    echo '<img src="data:image/png|image/jpeg|image/gif;base64,' . base64_encode( $content ) . '" />';
    echo 'Hello world.';
    
    }
    else {
       print "No image selected/uploaded";
    }
    
    ?>

另外,在将 phpmyadmin 中的文件上传到 blob 数据类型时出现以下错误

UPDATE `helpme`.`posts` SET `Photo` = 0xffd8ffe000104a46494600010201006000600000ffe10f074578696600004d4d002a0000000800060132000200000014000000564746000300000001000300004749000300000001003200009c9d00010000000e00000000ea1c0007000007f40000000087690004000000010000006a000000d4323030393a30333a31322031333a34373a34330000059003000200000014000000ac9004000200000014000000c0929100020000000335340000929200020000000335340000ea1c0007000007b40000000000000000323030383a30333a31342031333a35393a323600323030383a30333a31342031333a35393a3236000005010300030000000100060000011a00050000000100000116011b0005000000010000011e020100040000000100000126020200040000000100000dd90000000000000048000000010000004800000001ffd8ffe000104a46494600010100000100010000ffdb004300100b0c0e0c0a100e0d0e1211101318281a181616183123251d283a333d3c3933383740485c4e404457453738506d51575f626768673e4d71797064785c656763ffdb0043011112121815182f1a1a2f634238426363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363[...]

MySQL 说:

2006 - MySQL 服务器消失了

请告诉我如何解决这个问题。问题出在显示图像时。我不知道是否存在尺寸问题,请在此处提供帮助。

最佳答案

使用 addslashes 远不是执行 SQL 查询的正确方法。它并不总是能正确处理二进制数据。我不知道您使用的是什么资源,但它教会了您非常坏的习惯。

不要使用 mysql_query 在新的应用程序中。这是 1990 年代的遗留界面,由于不正确使用它会带来危险,因此正在被淘汰,这太容易做到了。最好在新项目中使用 mysqli 或 PDO。

您的查询应如下所示:

Update whyangry.posts set Photo=? where Pid=?

您可以在执行查询时绑定(bind)到那些占位符,避免出现编码问题。有many examples关于如何正确执行此操作。

关于php - 使用 blob 数据类型从 mysql php 显示图像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021381/

相关文章:

sql - 将 BLOB 与 Oracle 数据库中的其他 BLOB 进行比较

javascript - 使用 blob 解析数组对象

NoSQL 数据库和许多半大型 blob

当参数为已知字符串时,PHP 数组到字符串的转换错误

php - mysql语法中的mysql错误

php - 如何使用 CodeIgniter 框架从数组中插入多行?

php - 歌词网站的数据库设计

mysql - mysql中的EF自引用表

php - 重定向还是死亡?这些死亡陈述有帮助吗?

php - 如何使用 Laravel 重定向发送数据