【问题标题】:UPDATE VARBINARY(MAX) column in SQL Server table with $_FILE image upload使用 $_FILE 图像上传更新 SQL Server 表中的 VARBINARY(MAX) 列
【发布时间】:2019-04-30 11:30:44
【问题描述】:
我一直在互联网上寻求帮助,但一无所获。
基本上,我需要知道如何使用从 HTML 表单上传的图像的十六进制更新 SQL Server VARBINARY(MAX) 列。数据库与 HTML 表单位于不同的位置,因此 PHP 中的 move_uploaded_file 和 SQL 中的 OPENROWSET (BULK ...) 不起作用(无法找到文件)。
我还尝试在上传的$_FILE['name_']['tmp_name'] 上执行file_get_contents,然后使用unpack("H*hex") 并将其结果放入带有“0x”前缀的 SQL 列中,但是崩溃了,说它需要从VARCHAR 到 VARBINARY。当我转换它时,代码运行并填充列,但图像格式错误。
不知道下一步该做什么。请帮忙。
【问题讨论】:
标签:
php
sql-server
image-upload
varbinarymax
【解决方案1】:
解决方案:
这是使用PHP Driver for 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.'
?>