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

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


person Keith Maurino    schedule 27.03.2009    source источник


Ответы (3)


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

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

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

person TravisO    schedule 27.03.2009
comment
как насчет текстовой строки gzdeflate? двоичные сжатые текстовые данные кажутся правильными в базе данных. - person chiliNUT; 21.04.2014
comment
Он не спрашивал, должен ли он это делать, он спрашивал, КАК он может это сделать. Вы должны ответить на вопрос ОП, а затем, если необходимо, добавить свои мысли/мнения. - person Losbear; 26.04.2017
comment
Хотя это хороший совет, он не поможет людям, которые гуглят похожие проблемы в поисках решения. Не все двоичные данные являются изображением или файлом. - person dmarra; 28.04.2017
comment
Это не отвечает на заданный вопрос. Люди часто работают с устаревшими базами данных, в которых вещи уже хранятся в виде двоичных данных. - person Vedmant; 14.06.2017
comment
Это не должен быть принятый ответ, это не отвечает на вопрос. Существует множество причин для хранения данных в базе данных, а не в файловой системе. Этот ответ не отвечает на вопрос. Пожалуйста, обратитесь к ответу Перманы, если вы столкнетесь с этим вопросом в будущем. - person eragon2262; 16.10.2019

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, где тип — изображение.

person Permana    schedule 04.04.2011
comment
Определенный +1. Это должен быть выбранный ответ. Есть много случаев, когда использование Blob оправдано (проще сделать резервную копию 1 файла базы данных, чем, например, 10 миллионов очень маленьких файлов). Только одно замечание - у функции нет возврата в конце. - person baron_bartek; 10.11.2015

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

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

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

person KingBowen    schedule 08.04.2014