从php 7.1

时间:2017-08-03 13:20:06

标签: php sql-server odbc always-encrypted

我使用PHP,IIS和SQL Server 2016作为后端。我使用的是始终加密的功能。为此,我能够以纯文本格式选择数据。但无法将数据插入表中。 我正在使用这样的代码。

$queryInsert = "insert into empinfo (EmpID, JobTitle, LoginID, NatID) values 

(?,?,?,?)";
$res = odbc_prepare($connect, $queryInsert);
$result = odbc_execute($res, array($empId, $jobTitle, $loginId, $natId));

我收到这样的错误。

PHP Warning: odbc_prepare(): SQL error: [Microsoft][ODBC Driver 13 for SQL 
Server][SQL Server]Operand type clash: void type is incompatible with 
nvarchar(256) encrypted with (encryption_type = 'DETERMINISTIC', 
encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', 
column_encryption_key_name = 'CEK_Auto1', 
column_encryption_key_database_name = 'Test'), SQL state 22005 in 
SQLDescribeParameter in C:\inetpub\wwwroot\odbctest\odbctest.php on line 22 
PHP Warning: odbc_execute() expects parameter 1 to be resource, boolean 
given in C:\inetpub\wwwroot\odbctest\odbctest.php on line 23 

可以请任何人告诉我哪里做错了。

1 个答案:

答案 0 :(得分:0)

请尝试按如下方式指定参数类型

/* Construct the parameter array. */  
$employeeId = 5;  
$changeDate = "2005-06-07";  
$rate = 30;  
$payFrequency = 2;  
$params1 = array(  
               array($employeeId, null),  
               array($changeDate, null, null, SQLSRV_SQLTYPE_DATETIME),  
               array($rate, null, null, SQLSRV_SQLTYPE_MONEY),  
               array($payFrequency, null, null, SQLSRV_SQLTYPE_TINYINT)  

This article解释了如何使用ODBC 13.1驱动程序始终加密消费