Столбец UPDATE VARBINARY (MAX) в таблице SQL Server с загрузкой изображения $ _FILE - PullRequest
0 голосов
/ 28 ноября 2018

Я искал во всем Интернете помощь по этому вопросу и ничего не нашел.

По сути, мне нужно знать, как обновить столбец SQL Server VARBINARY(MAX), используя шестнадцатеричный код изображения, загруженного изHTML-форма.База данных находится в другом месте, чем HTML-форма, поэтому move_uploaded_file в PHP и OPENROWSET (BULK ...) в SQL не работает (не удается найти файл).

Я также пытался выполнить file_get_contents взагруженный $_FILE['name_']['tmp_name'], затем использовал unpack("H*hex") и поместил результат этого в столбец SQL с предваряющим «0x», но это вылетает, говоря, что его необходимо преобразовать из VARCHAR в VARBINARY.Когда я конвертирую его, код запускается и столбец заполняется, но изображение искажено.

Не знаю, что делать дальше.Просьба помочь.

1 Ответ

0 голосов
/ 28 ноября 2018

Решение:

Это базовый подход с использованием драйвера PHP для SQL Server :

Создание таблицы (T-SQL) :

CREATE TABLE [dbo].[ImageTable] (
    [ImageData] varbinary(max) NULL
)

PHP:

<?php
# Connection
$server = 'server\instance,port';
$database = 'database';
$uid = 'user';
$pwd = 'password';
$cinfo = array(
    "Database" => $database,
    "UID" => $uid,
    "PWD" => $pwd
);
$conn = sqlsrv_connect($server, $cinfo);
if( $conn === false )
{
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}

# Update image using CONVERT()
$image = file_get_contents('image.jpg');
$sql = "UPDATE ImageTable SET [ImageData] = CONVERT(varbinary(max), ?) WHERE (yor_update_condition)";
$params = array(
    array($image, SQLSRV_PARAM_IN)
);
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}

# End
echo 'Image updated.'
?>
...