更新MEDIUMBLOB

时间:2018-05-23 10:57:20

标签: php blob mariadb truncation

我正在尝试使用PHP post调用在MariaDB中的BLOB中编写。这个BLOB来自于从画布中获取BASE64:

var data= $('#signatureDiv').signature('toDataURL');
var base64data= data.replace(/^data:image\/(png|jpg);base64,/, "");

$.post("myFunc.php", {imgContents: base64data}, function(data) {});

现在,在myFunc.php中:

$imgContents = $_POST['imgContents'];
$decodedPNG = base64_decode($imgContents);

$defTest = "UPDATE recogidas SET FirmaProv = ':blobFirma' WHERE ID=$index";
$preparedpdo = $mypdoObject->prepare($defTest);
$preparedpdo->bindParam(':blobFirma', $decodedPNG, PDO::PARAM_LOB);
$preparedpdo->execute();
echo $decodedPNG;

我解码PNG以将其保存为BLOB。然后我准备SQL更新以将此BLOB上载到适当的MEDIUMBLOB列。但是,数据总是被截断为几个字节!正好对那些字节:

3A626C6F624669726D61

当它作为PNG时,需要大约100Kb。我尝试在PHP的开头使用它:

ini_set("odbc.defaultlrl", "1000K");

但它没有效果。为了确保解码是正确的,我尝试回显解码的BLOB,如果正确则返回。

为什么我的数据库会将数据截断为一包字节?

额外信息:我在画布中制作的图片无关紧要,上传到数据库的数据总是那些相同的字符。

1 个答案:

答案 0 :(得分:1)

  

为什么我的数据库会将数据截断为一包字节?

不是。如果你打算检查那些十六进制字节3A626C6F624669726D61实际意味着什么,你会看到它是:blobFirma。并且由于您指示数据库在您的语句中存储字符串值,这绝对是预期的结果。

如果您不想将固定字符串值存储到列中,请从语句中删除占位符周围的引号 ...