仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2060|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之将图片贮存在MySQL数据库里

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:21:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定<pstyle="TEXT-INDENT:2em">假如你想把二进制的数据,好比说图片文件和HTML文件,间接保留在你的MySQL数据库,那末这篇文章就是为你而写的!我将告知你如何经由过程HTML表单来贮存这些文件,如何会见和利用这些文件。<pstyle="TEXT-INDENT:2em">本文概述:<pstyle="TEXT-INDENT:2em">。在mysql中创建一个新的数据库<pstyle="TEXT-INDENT:2em">。一个如何贮存文件的例子程序<pstyle="TEXT-INDENT:2em">。一个如何会见文件的例子程序<pstyle="TEXT-INDENT:2em">在mysql中创建一个新的database<pstyle="TEXT-INDENT:2em">起首,你必需在你的mysql中创建一个新的数据库,我们将会把那些二进制文件贮存在这个数据库里。在例子中我会利用以下布局,为了创建数据库,<pstyle="TEXT-INDENT:2em">你必需做以下步骤:<pstyle="TEXT-INDENT:2em">。进进MySql把持器<pstyle="TEXT-INDENT:2em">。输出命令"createdatabasebinary_data;"<pstyle="TEXT-INDENT:2em">。输出命令"usebinary_data;"<pstyle="TEXT-INDENT:2em">。输出命令<pstyle="TEXT-INDENT:2em">"CREATETABLEbinary_data(idINT(4)<pstyle="TEXT-INDENT:2em">NOTNULLAUTO_INCREMENTPRIMARYKEY,<pstyle="TEXT-INDENT:2em">descriptionCHAR(50),bin_dataLONGBLOB,<pstyle="TEXT-INDENT:2em">filenameCHAR(50),filesizeCHAR(50),<pstyle="TEXT-INDENT:2em">filetypeCHAR(50));"(不克不及断行)<pstyle="TEXT-INDENT:2em">假如没成心外,数据库和表应当创建好了。<pstyle="TEXT-INDENT:2em">一个如何贮存文件的例子程序<pstyle="TEXT-INDENT:2em">用这个例子你能够经由过程Html表单将文件传输到数据库中。<pstyle="TEXT-INDENT:2em">store.php3<pstyle="TEXT-INDENT:2em">//store.php3-byFlorianDittmer<pstyle="TEXT-INDENT:2em">?><pstyle="TEXT-INDENT:2em">//假如提交了表单,代码将被实行:<pstyle="TEXT-INDENT:2em">if($submit){<pstyle="TEXT-INDENT:2em">//毗连到数据库<pstyle="TEXT-INDENT:2em">//(你大概必要调剂主机名,用户名和暗码)<pstyle="TEXT-INDENT:2em">MYSQL_CONNECT("localhost","root","password");<pstyle="TEXT-INDENT:2em">mysql_select_db("binary_data");<pstyle="TEXT-INDENT:2em">$data=addslashes(fread(fopen($form_data,"r"),filesize($form_data)));<pstyle="TEXT-INDENT:2em">$result=MYSQL_QUERY("INSERTINTObinary_data(description,bin_data,filename,filesize,filetype)<pstyle="TEXT-INDENT:2em">[接上一行:]VALUES($form_description,$data,$form_data_name,<pstyle="TEXT-INDENT:2em">$form_data_size,$form_data_type)");<pstyle="TEXT-INDENT:2em">$id=mysql_insert_id();<pstyle="TEXT-INDENT:2em">print"<pstyle="TEXT-INDENT:2em">ThisfilehasthefollowingDatabaseID:$id";<pstyle="TEXT-INDENT:2em">MYSQL_CLOSE();<pstyle="TEXT-INDENT:2em">}else{<pstyle="TEXT-INDENT:2em">//不然显现贮存新数据的表单<pstyle="TEXT-INDENT:2em">?><pstyle="TEXT-INDENT:2em">}?>



<pstyle="TEXT-INDENT:2em">假如你实行了这个程序,你将会瞥见一个复杂的Html表单,单击“扫瞄”选择一个文件,然后单击提交。<pstyle="TEXT-INDENT:2em">当文件上传至web服务器以后,程序将会告知你方才上传的文件的ID,记着这个ID,待会要用的。<pstyle="TEXT-INDENT:2em">一个如何会见文件的例子程序<pstyle="TEXT-INDENT:2em">你能够经由过程这个程序会见你方才贮存的文件<pstyle="TEXT-INDENT:2em">//getdata.php3-byFlorianDittmer<pstyle="TEXT-INDENT:2em">//挪用办法:getdata.php3?id=<pstyle="TEXT-INDENT:2em">if($id){<pstyle="TEXT-INDENT:2em">//你大概必要调剂主机名,用户名和暗码:<pstyle="TEXT-INDENT:2em">@MYSQL_CONNECT("localhost","root","password");<pstyle="TEXT-INDENT:2em">@mysql_select_db("binary_data");<pstyle="TEXT-INDENT:2em">$query="selectbin_data,filetypefrombinary_datawhereid=$id";<pstyle="TEXT-INDENT:2em">$result=@MYSQL_QUERY($query);<pstyle="TEXT-INDENT:2em">$data=@MYSQL_RESULT($result,0,"bin_data");<pstyle="TEXT-INDENT:2em">$type=@MYSQL_RESULT($result,0,"filetype");<pstyle="TEXT-INDENT:2em">Header("Content-type:$type");<pstyle="TEXT-INDENT:2em">echo$data;<pstyle="TEXT-INDENT:2em">};<pstyle="TEXT-INDENT:2em">?><pstyle="TEXT-INDENT:2em">程序必需晓得要会见谁人文件,你必需将ID作为一个参数。<pstyle="TEXT-INDENT:2em">比方:一个文件在数据库中的ID为2.你能够如许挪用它:<pstyle="TEXT-INDENT:2em">getdata.php3?id=2<pstyle="TEXT-INDENT:2em">假如你将图片贮存在数据库里,你能够向挪用图片一样挪用它。<pstyle="TEXT-INDENT:2em">Example:一个图片文件在数据库中的ID为3.你能够如许挪用它:<pstyle="TEXT-INDENT:2em">如何贮存年夜于1MB的文件:<pstyle="TEXT-INDENT:2em">假如你想贮存年夜于1MB的文件,你必需对你的程序、PHP设置、SQL设置举行很多修正,。<pstyle="TEXT-INDENT:2em">上面几条大概能够匡助你贮存小于24MB的文件:<pstyle="TEXT-INDENT:2em">1、修正store.php3,将MAX_FILE_SIZE的值改成24000000。<pstyle="TEXT-INDENT:2em">2、修正你的PHP设置,在一样平常情形下,PHP只同意小于2MB的文件,你必需将max_filesize(在php.ini中)的值改成24000000<pstyle="TEXT-INDENT:2em">3、往失落MYSQL的数据包巨细限定,在一样平常情形下MYSQL小于1MB的数据包.<pstyle="TEXT-INDENT:2em">4、你必需用以下参数重启你的MYSQL<pstyle="TEXT-INDENT:2em">/usr/local/bin/safe_mysqld-Okey_buffer=16M-Otable_cache=128-Osort_buffer=4M-Orecord_buffer=1M-Omax_allowed_packet=24M<pstyle="TEXT-INDENT:2em">5、假如仍旧堕落:多是超时毛病,假如你经由过程一个很慢的毗连来贮存一个很年夜的文件,PHP缺省的工夫限定为30秒。你能够将max_execution_time(在php.ini中)的值改成-1。

支持多线程,充分利用CPU资源
沙发
发表于 2015-1-17 17:53:52 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
爱飞 该用户已被删除
板凳
发表于 2015-1-21 06:57:57 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
飘灵儿 该用户已被删除
地板
发表于 2015-1-30 10:19:31 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
海妖 该用户已被删除
5#
发表于 2015-2-6 10:01:00 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
蒙在股里 该用户已被删除
6#
发表于 2015-3-4 16:41:58 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
变相怪杰 该用户已被删除
7#
发表于 2015-3-11 20:30:40 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
小妖女 该用户已被删除
8#
发表于 2015-3-19 12:10:27 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
第二个灵魂 该用户已被删除
9#
发表于 2015-3-28 01:57:37 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-26 10:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表