LINUX.ORG.RU

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

 , , ,


0

1

Имеется следующая проблема - PHP7(Сервер на CentOS), установлена 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 а в ODBC они просто не работают

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();

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



Последнее исправление: gwyllum (всего исправлений: 1)

не уверен, но может неполная совместимость с odbc. или какие отдельные настройки odbc P.S. может чем подскажет ссылка https://stackoverflow.com/questions/5549196/handle-clob-columns-with-php-odbc хоть там и оракл, но проблема скорее в odbc

Atlant ★★★★★
()
Последнее исправление: Atlant (всего исправлений: 1)

Может odbs думает что пишет в varchar и обрезает ?

ism ★★★
()
Последнее исправление: ism (всего исправлений: 3)

А что, использовать нативный mssql модуль для pdo не вариант?

no-such-file ★★★★★
()

В heidi точно так же биндил параметры или файл вставил? Потому что ограничения на сервере есть. Например не более 2100 параметров. Может и на размер есть.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо большое! Оказалось, что режутся только в случае использования bind. Переписал без них и все заработало как нужно

gwyllum
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.