所以,我必须从我的数据库导入图像,我已经尝试了所有可能的选项,图像由用户上传,所以我不控制文件的扩展名。哦,是的,图像必须出现在列表中,每个文章都有一个图像,所以我的代码是在一个小块中。好吧,我认为是数据库配置问题,或者我上传图像的方式,因为它已经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'];
所以我重申这一点不是一个重复的问题!
非常感谢你度过了愉快的一天!
答案 0 :(得分:1)
我假设您的addslashes()
函数试图转义特殊字符并阻止sql注入。不幸的是,这几乎肯定会搞砸你的图像blob( B inary L arge OB ject)。
这一行很可能会改变二进制文件。
$imageBlob = addslashes(file_get_contents($_FILES['imagen1']['tmp_name']) );
此外,您的PDO :: Execute()调用没有为BLOB指定二进制数据的正确类型。
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");