php上传图片存入数据库示例分享
程序员文章站
2023-11-22 15:41:04
大部分人的图片上传都是保存一个路径到数据库,这样在插入时确实快,也符合web的特点,但是在删除时就很麻烦,需要找到文件并删除,该代码能够把代码直接存入数据库,删除时一并删除...
大部分人的图片上传都是保存一个路径到数据库,这样在插入时确实快,也符合web的特点,但是在删除时就很麻烦,需要找到文件并删除,该代码能够把代码直接存入数据库,删除时一并删除。请注意:这样的话数据库大小会激增,请酌情使用
表结构
复制代码 代码如下:
create table `upload` (
`id` int(10) unsigned not null auto_increment,
`type` varchar(20) not null,
`data` mediumblob not null,
primary key (`id`)
) engine=innodb auto_increment=1 default charset=utf8;
index.html
复制代码 代码如下:
<!doctype html>
<html>
<head>
<title>
post-image
</title>
</head>
<body>
<form action="post.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file"/>
<input type="submit" value="ok"/>
</form>
</body>
</html>
post.php
复制代码 代码如下:
<?php
if ($_files["file"]["error"] > 0)
{
echo "error: " . $_files["file"]["error"] . "<br />";
}
else
{
$type = $_files["file"]["type"];
$size = $_files['file']['size'];
$tmp=$_files["file"]["tmp_name"];
$fp = fopen($tmp,'rb');
$data = bin2hex(fread($fp,$size));
$dsn='mysql:host=localhost;dbname=test';
echo '<pre>';
try{
$pdo = new pdo($dsn,'root','root');
$pdo->exec("insert into `upload`(`type`,`data`) values ('$type',0x$data)");
$id = $pdo->lastinsertid();
echo 'upload success!<a href="view.php?id='.$id.'">view</a>';
$pdo = null;
}catch (pdoexception $e){
echo $e->getmessage();
}
echo '</pre>';
fclose($fp);
}
view.php
复制代码 代码如下:
<?php
$id = $_get['id'];
if(is_numeric($id)){
$dsn='mysql:host=localhost;dbname=test';
try{
$pdo = new pdo($dsn,'root','root');
$rs = $pdo->query('select * from `upload` where `id`='.$id);
$row = $rs->fetchall();
$data = $row[0];
header("content-type:${data['type']}");
echo $data['data'];
$pdo = null;
}catch (pdoexception $e){
echo $e->getmessage();
}
}else{
exit();
}
上一篇: PHP输出缓存ob系列函数详解