使用PHP将二进制数据插入SQL Server

时间:2009-03-27 13:19:50

标签: php sql-server odbc

我在SQL Server 2005数据库中有一个varbinary(MAX)字段。我试图弄清楚如何使用PHP将二进制数据(即图像)插入到该字段中。我正在使用ODBC连接到SQL Server数据库。我已经看到了许多解释这个用于MySql数据库的例子,但是我无法让它与SQL Server一起使用。感谢。

3 个答案:

答案 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,建议使用文件系统存储。

Storing images in SQL Server?

答案 2 :(得分:1)

简单的答案是:停止你正在做的事情。

除非存在一些非常具体的安全问题,否则您不希望将二进制文件存储在数据库中。相反,您希望存储其文件名(可能重命名文件以防止冲突),然后将其存储在数据库中。如果安全性存在问题,请将它们放在非Web文件夹中,并使用您的代码检索文件,并仅在用户有权访问该文件时提供该文件。

将图像或文件存储在数据库中是浪费文件空间,误用数据库,而不是让事情做得最好;文件系统知道文件,数据库知道数据。