使用mssql php在SQL数据库中插入文件内容时出错

使用mssql php在SQL数据库中插入文件内容时出错,php,html,sql-server,database,file,Php,Html,Sql Server,Database,File,我正在尝试使用PHP和MSSQL将文件(pdf、图像)上载到数据库中。 这是桌子的结构- SRNO - int FIRMNUMBER - nchar(10) CLIENTCODE - nvarchar(50) FILENAME- nvarchar(50) FILETYPE - nvarchar(50) FILECONTENT - varbinary(MAX) TIMESTAMP - datetime CREATIONTIMESTAMP - datetime ADDEDBY - nchar(15

我正在尝试使用PHP和MSSQL将文件(pdf、图像)上载到数据库中。

这是桌子的结构-

SRNO - int
FIRMNUMBER - nchar(10)
CLIENTCODE - nvarchar(50)
FILENAME- nvarchar(50)
FILETYPE - nvarchar(50)
FILECONTENT - varbinary(MAX)
TIMESTAMP - datetime
CREATIONTIMESTAMP - datetime
ADDEDBY - nchar(15)
FILERELATED - nvarchar(50)
我尝试了很多方法,但仍然出现以下错误:

数组([0]=>Array([0]=>42000[SQLSTATE]=>42000[1]=>0 [code]=>0[2]=>[Microsoft][ODBC驱动程序11 for SQL Server]语法 错误、权限冲突或其他非特定错误[消息]=> [Microsoft][ODBC驱动程序11 for SQL Server]语法错误,权限 违反,或其他非特定错误)


它可以是任何数量的东西,但最有可能的罪魁祸首是文件中的二进制内容。使用适当的参数化以确保数据已清理,并提高安全性。您还应该对数据进行一些检查,以确保数据对于数据库列来说不会太长,并根据需要截断或拒绝

<?php
$clientCode = $_POST["clientCode"];
$fileName   = $_FILES["aadhaar"]["name"];
$fileType   = $_FILES["aadhaar"]["type"];
$fileTemp   = file_get_contents($_FILES["aadhaar"]["tmp_name"]);
$parameters = array(
    $clientCode,
    $fileName,
    $fileType,
    array($fileTemp, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING, SQLSRV_SQLTYPE_BINARY)
);
$query      = <<<SQL
INSERT INTO KYCSCANS (
    FIRMNUMBER, CLIENTCODE, FILENAME, FILETYPE, FILECONTENT, 
    TIMESTAMP, CREATIONTIMESTAMP, ADDEDBY, FILERELATED
) 
VALUES (
    'Global', ?, ?, ?, ?, GETDATE(), GETDATE(), 'madWeb', 'temp'
)
SQL;

$insertQuery = sqlsrv_query($jarvisconnection, $query, $parameters);

if ($insertQuery === false) {
    die("Aadhaar Query Failed" . print_r(sqlsrv_errors(), true));
}

您的代码易受SQL注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者使用恶意输入值破坏您的数据库。给出了风险的解释。切勿将未初始化的数据直接插入SQL。感谢您的帮助。我尝试使用您的代码,但现在收到以下错误-不允许从数据类型varchar(max)隐式转换为varbinary(max)。使用CONVERT函数运行此查询。你能帮我一下吗?检查我的编辑和函数。当我使用编辑过的代码时,它给了我以下错误:使用未定义的常量SQLSRV_PHPTYPE_STRING-在中假定为“SQLSRV_PHPTYPE_STRING”。。。以及使用未定义的常量SQLSRV\U SQLTYPE\U BINARY-在。。。然后我将参数数组更改为
code
$parameters=array($clientCode,$fileName,$fileType,array($fileTemp,SQLSRV_PARAM_IN,SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR),SQLSRV_SQLTYPE_BINARY(1800))<代码>代码
但是这个错误0:字符串数据,右截断
SRNO - int
FIRMNUMBER - nchar(10)
CLIENTCODE - nvarchar(50)
FILENAME- nvarchar(50)
FILETYPE - nvarchar(50)
FILECONTENT - varbinary(MAX)
TIMESTAMP - datetime
CREATIONTIMESTAMP - datetime
ADDEDBY - nchar(15)
FILERELATED - nvarchar(50)
<?php
$clientCode = $_POST["clientCode"];
$fileName   = $_FILES["aadhaar"]["name"];
$fileType   = $_FILES["aadhaar"]["type"];
$fileTemp   = file_get_contents($_FILES["aadhaar"]["tmp_name"]);
$parameters = array(
    $clientCode,
    $fileName,
    $fileType,
    array($fileTemp, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING, SQLSRV_SQLTYPE_BINARY)
);
$query      = <<<SQL
INSERT INTO KYCSCANS (
    FIRMNUMBER, CLIENTCODE, FILENAME, FILETYPE, FILECONTENT, 
    TIMESTAMP, CREATIONTIMESTAMP, ADDEDBY, FILERELATED
) 
VALUES (
    'Global', ?, ?, ?, ?, GETDATE(), GETDATE(), 'madWeb', 'temp'
)
SQL;

$insertQuery = sqlsrv_query($jarvisconnection, $query, $parameters);

if ($insertQuery === false) {
    die("Aadhaar Query Failed" . print_r(sqlsrv_errors(), true));
}