Поиск в Google не очень помог здесь. Я пытаюсь вставить двоичный файл в базу данных SQL Server из PHP с помощью хранимой процедуры. Проблема в том, что когда я пытаюсь связать файл, PHP выдает ошибку:
Warning: mssql_bind() [function.mssql-bind]: Unable to set parameter in C:\inetpub\wwwroot\squidersbeta\squidersbeta6\cv_submit_send.php on line 36
Warning: mssql_execute() [function.mssql-execute]: message: Procedure or function 'UploadCV' expects parameter '@fileData', which was not supplied. (severity 16) in C:\inetpub\wwwroot\squidersbeta\squidersbeta6\cv_submit_send.php on line 39
Я использую PHP5.2 на Windows 2008 x64, используя драйверы MSSQL. Если возможно, я бы хотел продолжать их использовать, так как драйверы SQLSRV, похоже, не работают для меня должным образом. Я обнаружил, что должен передать данные как VARCHAR, поэтому мой сценарий считывает файл как строку, а затем передает его SP. Фрагмент кода, вызывающий это:
$fileBinary = bin2hex(file_get_contents($_FILES['cv_file']['tmp_name']));
//Prepare to execute the Stored Procedure
$spCall = mssql_init("UploadCV", $DBhandle);
--SNIP--
mssql_bind($spCall,"@fileData",$fileBinary, SQLVARCHAR, false, false, -1); //This is the line that breaks
mssql_bind($spCall, "@fileName", $_FILES['cv_file']['name'], SQLVARCHAR);
mssql_bind($spCall, "@fileType", $_FILES['cv_file']['type'], SQLVARCHAR);
mssql_execute($spCall) or die("Uh-oh, query failed!".mssql_get_last_message());
Я пробовал варианты вызова bind () с указанным значением $ maxlength и без него. Я видел упоминания о том, что SQLVARCHAR могут быть ограничены 254 символами - это правда, и есть ли способ обойти это? Спасибо.