我在SQL Server 2005数据库中有一个varbinary(MAX)字段。我试图弄清楚如何使用PHP将二进制数据(即图像)插入到该字段中。我正在使用ODBC连接到SQL Server数据库。我已经看到了许多解释这个用于MySql数据库的例子,但是我无法让它与SQL Server一起使用。感谢。
答案 0 :(得分:17)
function prepareImageDBString($filepath)
{
$out = 'null';
$handle = @fopen($filepath, 'rb');
if ($handle)
{
$content = @fread($handle, filesize($filepath));
$content = bin2hex($content);
@fclose($handle);
$out = "0x".$content;
}
return $out;
}
用法:
$out = prepareImageDBString('/img/myimg.png');
mssql_query("INSERT INTO MyTable(MyImage) VALUES($out) ");
MyImage是SQL Server字段,其类型为image
答案 1 :(得分:2)
我不会说这是一个不好的做法,这取决于图片的大小以及您的应用程序如何使用它。
如果文件大小低于256K,则在db中存储更有效; 超过1 mb,建议使用文件系统存储。
答案 2 :(得分:1)
简单的答案是:停止你正在做的事情。
除非存在一些非常具体的安全问题,否则您不希望将二进制文件存储在数据库中。相反,您希望存储其文件名(可能重命名文件以防止冲突),然后将其存储在数据库中。如果安全性存在问题,请将它们放在非Web文件夹中,并使用您的代码检索文件,并仅在用户有权访问该文件时提供该文件。
将图像或文件存储在数据库中是浪费文件空间,误用数据库,而不是让事情做得最好;文件系统知道文件,数据库知道数据。