вставить в всегда зашифрованное поле sqlserver 2016 из php 7.1

Я использую 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 

может, пожалуйста, кто-нибудь сказать, где я делаю неправильно.


person Sanjay Yadav    schedule 03.08.2017    source источник
comment
Следовали ли вы конфигурации DSN, указанной здесь: docs.microsoft.com/en-us/sql/connect/odbc/? И подготовили ключи клиента?   -  person David Browne - Microsoft    schedule 03.08.2017
comment
Спасибо за быстрый ответ Давид. Да, я настроил DSN в соответствии с указанной вами статьей, а также подготовил ключи клиента, и это работает нормально, поскольку я могу запустить оператор select из кода.   -  person Sanjay Yadav    schedule 03.08.2017


Ответы (1)


Пожалуйста, попробуйте указать типы параметров следующим образом

/* 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)  

Эта статья объясняет, как всегда использовать шифрование с помощью драйвера ODBC 13.1.

person Nikhil Vithlani - Microsoft    schedule 03.08.2017
comment
Привет Нихил, спасибо за информацию. но в предоставленной статье используются драйверы sqlsrv, но [blogs.msdn.microsoft.com/sqlphp/2016/07/11/ не поддерживает постоянное шифрование. Поэтому я пытался использовать odbc 13.1. - person Sanjay Yadav; 08.08.2017
comment
Я вижу, тогда я удалю ссылку из своего ответа. Удалось ли указать типы параметров для параметров при использовании драйвера odbc? Возможно, вы сможете указать тип параметра так, как я описал выше. - person Nikhil Vithlani - Microsoft; 08.08.2017
comment
Нихила нет. Я не вижу ни одного параметра, где я мог бы указать тип параметра в odbc 13.1... Сейчас я использую pdo, но это также не принимается. - person Sanjay Yadav; 09.08.2017
comment
Вы смотрели эту статью, docs.microsoft.com/en-us/sql/connect/odbc/ - person Nikhil Vithlani - Microsoft; 11.08.2017