从数据库导入Blob图像

时间:2016-06-08 23:01:53

标签: php mysql sql database image

所以,我必须从我的数据库导入图像,我已经尝试了所有可能的选项,图像由用户上传,所以我不控制文件的扩展名。哦,是的,图像必须出现在列表中,每个文章都有一个图像,所以我的代码是在一个小块中。好吧,我认为是数据库配置问题,或者我上传图像的方式,因为它已经3个小时了,我无法解决这个问题!

以下是上传代码:

$imageName = addslashes($_FILES['imagen1']['name']);
$imageTempName =  $_FILES['imagen1']['tmp_name'];
$imageBlob = addslashes(file_get_contents($_FILES['imagen1']['tmp_name']) );
$imageType=pathinfo($imageName, PATHINFO_EXTENSION);

$permit=array("jpg", "tif", "gif", "png", "raw", "jpeg", "bmp");

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=lacajota', 'root', '', $pdo_options);

$req = $bdd->prepare('INSERT INTO imagenes(userID, articID, name, image)
       VALUES(:userID, :articID, :name, :image)');
$req->execute(array(

            'userID'=> $_SESSION['userID'],
            'articID'=> $LastArtLast['ID'],
            'name'=> $imageName,
            'image'=> $imageBlob
            ));

我已经跳过了一些没有重要的内容

这是提取图像的代码:

  

步骤1简单链接到图像(这是一个片段)

<img src="getImage.php?id=<?php echo  $userInfoLastART1['ID'];?>" class="imageArtList">
  

AND STEP 2制作getImage.php我的图像

 $id = $_GET['id'];


 $link = mysql_connect("localhost", "root", "");
  mysql_select_db("imagenes");

$sql = "SELECT * FROM imagenes WHERE articID=$id";
$result = mysql_query("$sql");
$row = mysql_fetch_assoc($result);

mysql_close($link);

header("Content-type: image/jpg");
  echo $row['image'];

所以我重申这一点不是一个重复的问题!

非常感谢你度过了愉快的一天!

2 个答案:

答案 0 :(得分:1)

图像的文件内容必须以二进制形式处理,不得修改。

我假设您的addslashes()函数试图转义特殊字符并阻止sql注入。不幸的是,这几乎肯定会搞砸你的图像blob( B inary L arge OB ject)。

这一行很可能会改变二进制文件。

$imageBlob = addslashes(file_get_contents($_FILES['imagen1']['tmp_name']) );

此外,您的PDO :: Execute()调用没有为BLOB指定二进制数据的正确类型。

重要说明

  • 如果您正确使用PDO,PDO将为您处理此问题。
    • 您当前正在做的事情应该足够了,但您需要告诉PDO将图像处理为二进制文件。
    • 如果您将代码用于getImage.php,您可能会发现代码更易于管理。

解决方案

$imageName      = addslashes($_FILES['imagen1']['name']);
$imageTempName  = $_FILES['imagen1']['tmp_name'];
//$imageBlob        = file_get_contents( imageTempName );
$imageBlob      = fopen($imageTempName , 'rb');

$imageType=pathinfo($imageName, PATHINFO_EXTENSION);

$permit=array("jpg", "tif", "gif", "png", "raw", "jpeg", "bmp");

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=lacajota', 'root', '', $pdo_options);

$req = $bdd->prepare('
    INSERT INTO imagenes
        (userID, articID, name, image)
    VALUES
        (:userID, :articID, :name, :image)'
);

$req->bindParam(':userID', $_SESSION['userID'], PDO::PARAM_INT);
$req->bindParam(':articID', $LastArtLast['ID'], PDO::PARAM_INT);
$req->bindParam(':name', $imageName, PDO::PARAM_STR);
$req->bindParam(':image', $imageBlob, PDO::PARAM_LOB);

$req->execute();

答案 1 :(得分:0)

header("Content-Type: image/jpeg");

而不是

header("Content-type: image/jpg");