@Barmunk

Как отправить бинарные данные с помощью pdo_dblib?

php 5.6 \ pdo_dblib \ freetds

Еслиб это был виндовый драйвер SQLSRV, то с помощью константы PDO::SQLSRV_ENCODING_BINARY тип вполне успешно указывается и данные отправляются.

$stmt = $conn->prepare("EXEC proc @fileData = ?");
$stmt->bindParam(1, $fileData, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();


но вот на линуксе стоит драйвер dblib, у которого нет такой константы (переехать на другой не вариант). Пробовал использовать bin2hex, а потом передавать строку, которая конвертируется уже на стороне sql в бинарный тип, но такое работает только на файлах меньше одного метра, дальше уже идут потери и слишком долгая конвертация.

Нашел пул реквест с новыми типами (DBLIB_PARAM_BINARY), но прошел уже год https://github.com/php/php-src/pull/2168/commits/2...
  • Вопрос задан
  • 258 просмотров
Решения вопроса 1
@Barmunk Автор вопроса
нашел таки способ для типа BINARY

$hex = mssql_escape($data);
$sql = "SET TEXTSIZE 524288000; EXEC proc @fileData = $hex";

function mssql_escape($data) 
{
   if(is_numeric($data)) return $data;

   $unpacked = unpack('H*hex', $data);
   return '0x' . $unpacked['hex'];
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы