更新 MEDIUMBLOB 时出现不需要的数据截断

Undesired data truncation when updating a MEDIUMBLOB

我正在尝试使用 PHP post 调用在我的 MariaDB 中写入 BLOB。此 BLOB 来自从 canvas:

获取 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,如果正确,它 returns。

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

补充说明:无论我在canvas中制作的图片如何,上传到数据库的数据始终是相同的字符。

Why is my database truncating the data to a pack of bytes?

不是。如果您费心检查那些十六进制字节 3A626C6F624669726D61 的实际含义,您会发现它是 :blobFirma。并且由于您指示数据库在您的语句中存储 字符串值 ,这绝对是预期的结果。

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