PDO ODBC MsSQL ограничение на вставку данных

171
14 июня 2018, 19:10

Имеется следующая проблема - PHP7, установлена PDO ODBC библиотека. Запросы к серверу MsSQL(2016) делаю через него. Проблема в следующем - мне необходимо записать содержимое файла, но записываются только первые 4000 байт данных. Что уже пробовал сделать 1. Запрос SET TEXTSIZE 99999999 - эта штука работает только в обратную сторону - т.е. SET TEXTSIZE 99 запишет только 99 байт, а SET TEXTSIZE 999999 запишет только 4000. Нагуглил запрос SET TEXTLIMIT, но сервер его не распознает и выдает ошибку. 2. Пробовал прописать в php.ini mssql.textsize, mssql.textlimit но безрезультатно, т.е. эти переменные вообще не появляются в php.ini(апач и сервер перезагружались после правок файла). Я так понимаю, что они имели смысл для mssql_query, которую благополучно выпилили в 7 версии PHP 3. Переменная odbc.defaultlrl равна 150k, по идее должно хватать с запасом 4. На самом сервере ограничений нет, т.е. я без проблем подключился через heidiSQL и записал огроменный текст без проблем 5. Поле имеет тип IMAGE

На всякий привожу код

$CreatedOn = strval(date("Y-m-d H:i:s"));
$dbh = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=myMssql;DATABASE=' . 
$database.';charset=UTF-8', $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query='SET TEXTSIZE 9999999';
$stmt=$dbh->prepare($query);
$stmt->execute();
$stmt=null;
$ins = "insert into tbl_Files(ItemTypeID, Link, FileData, CreatedOn)
                values (
                    '{39A5B367-4A7A-473E-8F74-26977CB6DB67}', 'filename.txt', :content, '{$CreatedOn}'
                )";
$stmt = $dbh->prepare($ins);
$filename = "test.txt";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
$stmt->bindParam(':content', $contents, PDO::PARAM_LOB);
$stmt->execute();

Буду очень благодарен, если кто-то подскажет, куда копать

Answer 1

В итоге оказалось, что резался запрос только в случае использования bind. Таким образом, переписал чтобы отправлялся запрос сразу без всяких prepare и проблема была решена.

READ ALSO
Не найден индекс в post-запросе

Не найден индекс в post-запросе

У меня ошибка: не найден индекс alid в post-запросеВсе перепроверил - все вроде бы должно работать, так где тогда ошибка?

192
Ошибка Roundcube “openssl_decrypt()”

Ошибка Roundcube “openssl_decrypt()”

Версия roundcube 12

209
Yii2 попытка соединения не удалась

Yii2 попытка соединения не удалась

Я установил yii2 через композер в папку /var/www/site Сборка basic, сервер на ubuntu 1604 в локальной сети

220