mysql可以直接保存二进制的数据,数据类型是blob。
通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之
处就在于两者所需要保存的数据量不同。MySQL数据库使用专门的字段来保存大容量的数据,数据
类型为BLOB。
MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可
变数量的数据。BLOB具有四种类型,分别是TINYBLOB,BLOB, MEDIUMBLOB 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。
建立数据库
CREATE TABLE ccs_image (
id int(4) unsigned NOT NULL auto_increment,
description varchar(250) default NULL,
bin_data longblob,
filename varchar(50) default NULL,
filesize varchar(50) default NULL,
filetype varchar(50) default NULL,
PRIMARY KEY (id)
)
接着是上传文件的页面,upload.php,code如下:
02
| < HEAD >< TITLE >Store binary data into SQL Database</ TITLE ></ HEAD >
|
08
| if (isset($_POST['submit'])) {
|
09
| $form_description = $_POST['form_description'];
|
10
| $form_data_name = $_FILES['form_data']['name'];
|
11
| $form_data_size = $_FILES['form_data']['size'];
|
12
| $form_data_type = $_FILES['form_data']['type'];
|
13
| $form_data = $_FILES['form_data']['tmp_name'];
|
15
| $ connect = MYSQL_CONNECT ( "localhost", "root", "") or die("Unable to connect to MySQL server");
|
16
| mysql_select_db( "test") or die("Unable to select database");
|
18
| $ data = addslashes (fread(fopen($form_data, "r"), filesize($form_data)));
|
20
| //echo "mysqlPicture=".$data;
|
23
| $ result = MYSQL_QUERY ( "INSERT INTO ccs_image (description,bin_data,filename,filesize,filetype) VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");
|
25
| $ id = mysql_insert_id ();
|
26
| print "<p>This file has the following Database ID: < a href = 'getdata.php?id=$id' >< b >$id</ b ></ a >";
|
35
| < form method = "post" action = "http://localhost/temp/1018/upload.php" enctype = "multipart/form-data" >
|
37
| < input type = "text" name = "form_description" size = "40" >
|
38
| < INPUT TYPE = "hidden" name = "MAX_FILE_SIZE" value = "1000000" > < br >
|
39
| File to upload/store in database:
|
40
| < input type = "file" name = "form_data" size = "40" >
|
41
| < p >< input type = "submit" name = "submit" value = "submit" >
|
上文中的 $_FILES['form_data']['name']; 等是获取刚上传来的文件的信息,php manual中有提到
注: 要确保文件上传表单的属性是 enctype="multipart/form-data",否则文件上传不了。
全局变量 $_FILES 自 PHP 4.1.0 起存在(在更早的版本中用 $HTTP_POST_FILES 替代)。此数组包含有所有上传的文件信息。
以上范例中 $_FILESuserfile。名称可随意命名。
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES['userfile']['size']
已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']
和该文件上传相关的错误代码。此项目是在 PHP 4.2.0 版本中增加的。