将图像上传到 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 数据库