【问题标题】: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 列中,但是崩溃了,说它需要从VARCHARVARBINARY。当我转换它时,代码运行并填充列,但图像格式错误。

不知道下一步该做什么。请帮忙。

【问题讨论】:

    标签: 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.'
    ?>
    

    【讨论】:

      猜你喜欢
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      相关资源
      最近更新 更多