将图像上传到 sql server 上的 varbinary 字段时,file_get_contents 值中的“附近语法不正确”

Posted

技术标签:

【中文标题】将图像上传到 sql server 上的 varbinary 字段时,file_get_contents 值中的“附近语法不正确”【英文标题】:"Incorrect syntax near" in file_get_contents value when upload image to varbinary field on sql server 【发布时间】:2019-11-20 18:32:25 【问题描述】:

我想将图像保存到数据库。我正在使用 php 5.3、Jquery 和 SQL Server。 我正在使用 VARBINARY(MAX) 字段来存储我的文件。 但是,它总是以我的文件字符串格式返回“Incorrect syntax near”。

我已经阅读了 *** 等的任何解决方案,但没有任何效果。

这是我的代码

<?php
include "../../system/conn.php";
$xuser_id = $_POST['xuser_id'];
$xusername = $_POST['xusername'];
$xpassword = md5($_POST['xpassword']);
$xrealname = $_POST['xrealname'];
$xgrup_id= $_POST['xgrup_id'];
$stat = $_POST['stat'];
$ttd = file_get_contents($_FILES['file']['tmp_name']);

$query = "EXECUTE [dbo].[sp_pengguna] '$xuser_id','$xusername','$xpassword','$xrealname','','','$xgrup_id','','','$stat','$ttd'";



$input = mssql_query($query) or die(mssql_get_last_message());

print_r($input);

?>

这是我的桌子

这是我的功能

ALTER PROCEDURE  [dbo].[sp_pengguna] 
    @user_id nvarchar(50), 
    @username nvarchar(20),
    @password nvarchar(50),
    @realname nvarchar(50),
    @last_login nvarchar(50),
    @last_login_ip nvarchar(50),
    @grup_id nvarchar(50),
    @input_date datetime,
    @last_update datetime,
    @stat varchar(20),
        @ttd varbinary(max)
AS 
    SET NOCOUNT ON;
    if @stat = 'delete' and @user_id<>''
        begin
            DELETE FROM [dbo].[pengguna]
                  WHERE [user_id] = @user_id
        end
    else
        begin   
        if @user_id='' 
            begin
                INSERT INTO [dbo].[pengguna]
                           ([user_id]
                           ,[username]
                           ,[password]
                           ,[realname]
                           ,[last_login]
                           ,[last_login_ip]
                           ,[grup_id]
                           ,[input_date]
                           ,[last_update]
                                ,[ttd_pengguna]
                                )
                     VALUES
                           (NEWID()
                           ,@username
                           ,@password
                           ,@realname
                           ,@last_login
                           ,@last_login_ip
                           ,@grup_id
                           ,GETDATE()
                           ,GETDATE()
                                ,@ttd
                           )
            end
        else 
            begin
                UPDATE [dbo].[pengguna]
                   SET [username]   = @username
                      ,[password]   = @password
                      ,[realname]   = @realname
                      ,[grup_id]    = @grup_id
                      ,[last_update]= @last_update
                        ,[ttd_pengguna] = @ttd
                 WHERE [user_id]    = @user_id
            end
    end;

当我尝试上传图片时,它总是返回“Incorrect syntax near” 尝试上传PNG图像时

这是在尝试上传 JPEG 图像时

我对此一无所知,有人有解决方案吗?

【问题讨论】:

如果您希望将文件的内容存储在您的 MSSQL 数据库列中,您需要先将该内容包装在 PHP 函数 bin2hex 中,然后再将其传递给过程,然后在该过程在插入之前使用CONVERT(VARBINARY(MAX), @ContentOfFile)。当您尝试从 SQL 打印内容时,请使用 PHP 函数 hex2bin 看***.com/questions/41631765/… @IgorIlic 它的工作。但我不能使用 hex2bin 函数,因为我使用的是 PHP 5.3。我已阅读此***.com/a/9727203/4369288 解决方案,但无法正常工作。 【参考方案1】:

已解决,我只是将图像转换为base64字符串并在程序中使用varchar类型的参数(不要使用nvarchar),然后将其转换为varbinary

【讨论】:

以上是关于将图像上传到 sql server 上的 varbinary 字段时,file_get_contents 值中的“附近语法不正确”的主要内容,如果未能解决你的问题,请参考以下文章

将 MS SQL Server 图像数据移动到 MySQL longblob

Winforms:如何使用 C# 将图片上传到 SQL Server 数据库

使用 sql server 作业上传到 gcp 存储桶

将文件上传到 Flutter web 上的 Parse Server

如何将文件表与SQL Server中的现有表链接

将 Excel 数据上传到 SQL Server 2005 时出错