Вставка двоичных данных в SQL Server с помощью PHP

У меня есть поле varbinary(MAX) в базе данных SQL Server 2005. Я пытаюсь выяснить, как вставить двоичные данные (т. е. изображение) в это поле с помощью PHP. Я использую ODBC для подключения к базе данных SQL Server. Я видел несколько примеров, которые объясняют это для использования с базой данных MySql, но я не смог заставить ее работать с SQL Server. Спасибо.

3 ответов


простой ответ: Прекратите то, что вы делаете.

вы не хотите хранить двоичные файлы в базе данных, если у вас нет определенных проблем с безопасностью. Вместо этого вы хотите сохранить их имена файлов (возможно, переименовать файлы, чтобы предотвратить конфликт), а затем сохранить их в базе данных. Если проблема с безопасностью, поместите их в не веб-папку и используйте свой код для извлечения файла и обслуживайте файл, только если у пользователя есть доступ к нему.

хранение изображений или файлы внутри базы данных-это пустая трата файлового пространства, неправильное использование баз данных и не позволение вещам делать то, что они делают лучше всего; файловая система знает файлы, база данных знает данные.


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


Я не скажу, что это плохая практика, это зависит от того, насколько велик образ и как его использует ваше приложение.

Если файл меньше 256K в размере, магазин в db более эффективен; Более 1 Мб, рекомендуется хранить в файловой системе.

хранение изображений в SQL Server?