file.php
< ?php
$hostname="localhost";
$username="root";
$password="tiger";
/* @var $dbhandle type */
$dbhandle = \mysqli_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
$select= \mysqli_select_db($dbhandle,"sample")
or mysqli_error($dbhandle);
$filename=addslashes(file_get_contents($_FILE['photo']['tmp_name']));
$image=basename( $_FILES['photo']['name']);
$sql="insert into starterveg(img)values
('$image')";
$result= \mysqli_query($dbhandle,$sql) or die(\mysqli_error($dbhandle));
$mysqli_close = \mysqli_close($dbhandle);
?>
getimage.php
<?php
$hostname="localhost";
$username="root";
$password="tiger";
/* @var $dbhandle type */
$dbhandle = \mysqli_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
/* @var $select type */
$select= \mysqli_select_db($dbhandle,"sample")
or mysqli_error($dbhandle);
/* @var $itemId type */
$itemId= (\filter_input(\INPUT_GET,'itemId'));
$sql="select img from starterveg where itemId='$itemId'";
$res2=mysqli_query($dbhandle,$sql);
$row= mysqli_fetch_assoc($res2);
mysqli_close($dbhandle);
header("Content-type: image/jpg");
stripslashes($row['img']);
echo $row['img'];
<body>
<img src="getimage.php?itemId=oepsv6812" alt="image" id="img1">
</body>
我已将图像存储在数据库中,并希望以html格式检索。我面临的问题是,如果我通过php代码插入图像,图像不会以html格式显示。但是,如果我从phpmyadmin插入图像,我可以在html表单上显示。当我通过php代码插入图像时,它存储为BLOB 10B,如果我通过phpmyadmin插入它存储为BLOB -6.9KiB。这两者之间有任何区别。请解释。
答案 0 :(得分:0)
我不是PHP的专家,但假设getimage.php?itemId = oepsv6812返回文件名正确可能您返回的文件名不在路径中。如果你使用的是linux,你应该记得linux中的文件名是区分大小写的。
答案 1 :(得分:0)
问题(除了sql注入...)是你没有存储文件,只是文件名:
$image=basename( $_FILES['photo']['name']);
$sql="insert into starterveg(img)values
('$image')";
然后你使用你的列就像它包含图像数据一样(它不包含字符串):
header("Content-type: image/jpg");
stripslashes($row['img']);
echo $row['img'];
将文件名存储在数据库而不是图像数据中是正确的做法,但是您需要将实际图像和路径存储到图像中,以便您可以读取并回显它。目前你还没有存储文件,所以当临时目录被清理时它就会消失。