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

Kei*_*ino 6 php sql-server odbc

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

Per*_*ana 18

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;
}
Run Code Online (Sandbox Code Playgroud)

用法:

$out = prepareImageDBString('/img/myimg.png');
mssql_query("INSERT INTO MyTable(MyImage) VALUES($out) ");
Run Code Online (Sandbox Code Playgroud)

MyImage是SQL Server字段,其类型为image


Tra*_*isO -4

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

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

在数据库中存储图像或文件是对文件空间的浪费,是对数据库的误用,并且不能让事情发挥其最佳作用;文件系统知道文件,数据库知道数据。

  • 他没有问他是否应该这样做,而是问他如何才能做到这一点。您应该回答OP的问题 - 然后 - 如果必须的话,请添加您的想法/意见。 (9认同)
  • 虽然这是一个很好的建议,但它并不能帮助那些在谷歌上搜索类似问题寻找解决方案的人。并非所有二进制数据都是图像或文件。 (3认同)
  • 这不应该是公认的答案,这不能回答问题。将数据存储在数据库而不是文件系统中的原因有很多。这个“答案”并没有回答问题。如果以后遇到这个问题,请参考Permana的回答。 (3认同)
  • 它没有回答所提出的问题。人们经常使用旧数据库,其中的内容已经存储为二进制数据。 (2认同)