【问题标题】:Undesired data truncation when updating a MEDIUMBLOB更新 MEDIUMBLOB 时出现不希望的数据截断
【发布时间】:2018-05-23 10:57:20
【问题描述】:

我正在尝试使用 PHP 发布调用在我的 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,如果正确则返回。

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

额外信息:不管我在画布上画的图片如何,上传到数据库的数据总是那些相同的字符。

【问题讨论】:

    标签: php blob mariadb truncation


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多