PHP-PDO&;更新后大对象(LOB)已损坏

PHP-PDO&;更新后大对象(LOB)已损坏,php,sql-server,pdo,Php,Sql Server,Pdo,几个月前,我的Ubuntu软件包自动将PHP从7.0.8更新到7.0.13,在这一点上,我更新存储在SQL数据库中的照片的脚本开始失败。我通过重新安装7.0.8解决了这个问题。上个月,我再次被自动更新到7.0.15,我的脚本再次失败 我的脚本使用PDO和FreeTDS以及大对象(LOB)来处理照片,将jpg图像写入MS-SQL数据库。我要强调的是,它一直运行到PHP 7.0.8版。下面是隔离我的问题的测试脚本 <?php $dsn = 'dblib:dbname=photos;host=

几个月前,我的Ubuntu软件包自动将PHP从7.0.8更新到7.0.13,在这一点上,我更新存储在SQL数据库中的照片的脚本开始失败。我通过重新安装7.0.8解决了这个问题。上个月,我再次被自动更新到7.0.15,我的脚本再次失败

我的脚本使用PDO和FreeTDS以及大对象(LOB)来处理照片,将jpg图像写入MS-SQL数据库。我要强调的是,它一直运行到PHP 7.0.8版。下面是隔离我的问题的测试脚本

<?php

$dsn = 'dblib:dbname=photos;host=gary';
$id = 693925;

$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try {    
       $photo = file_get_contents("coco.jpg");
       $query = "UPDATE photo_table SET photo = :photo WHERE id = :id";
       $stmt = $dbh->prepare($query);
       $stmt->bindValue(":photo", $photo, PDO::PARAM_LOB);
       $stmt->bindValue(":id", $id, PDO::PARAM_INT);
       $stmt->execute();
    }
}
catch (PDOException $e) {
    echo $e->getMessage();
}
使用最新可用的PHP版本7.0.15,从数据库中读取是可行的,包括将照片作为大型对象读取。将其他字段写入数据库没有问题,只会在我的图像上失败

尽管在过去几周里进行了搜索,但我仍然必须找到其他人报告同样的问题


我需要的是任何建议,要么是代码的更改,要么是允许LOB再次工作的一些配置设置

我建议您总是使用
bindParam
而不是
bindValue
,因为在
bindParam

与此不同,变量被绑定为 参考,仅在 被称为


这只是建议,请点击这里

我的解决方案/解决方法是在将数据发送到SQL之前,将图像中的二进制数据转换为十六进制表示形式

$photo = bin2hex(file_get_contents("coco.jpg"));
在SQL语句期间再次将其转换回

$query = 
"UPDATE photo_table SET photo=CONVERT(varbinary(max), :photo, 2) WHERE id = :id";

bindParam的结果也一样:(我想知道是否有人成功地使用LOB在更高版本的PHP中写入MS-SQL数据库。这是导致7.0.12版出现重大更改的主要原因。还有一个相关的开放性错误
$photo = bin2hex(file_get_contents("coco.jpg"));
$query = 
"UPDATE photo_table SET photo=CONVERT(varbinary(max), :photo, 2) WHERE id = :id";