Я искал по всему Интернету помощь по этому вопросу и ничего не нашел.
В основном мне нужно знать, как обновить 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
, Когда я конвертирую его, код запускается и столбец заполняется, но изображение искажено.
Не знаю, что делать дальше. Пожалуйста, помогите.
Решение:
Это базовый подход с использованием 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.'
?>
Других решений пока нет …