代码之家  ›  专栏  ›  技术社区  ›  Juan JuezSarmiento

更新mediumblob时不需要的数据截断

  •  -1
  • Juan JuezSarmiento  · 技术社区  · 7 年前

    我正试图用一个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 回复  |  直到 7 年前
        1
  •  1
  •   C3roe    7 年前

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

    它不是_T。如果您曾经费心检查那些十六进制字节 3A626C6F624669726D61 实际上,你会发现 :blobFirma . 因为你指示数据库存储 字符串值 在您的声明中,这绝对是预期的结果。

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

    推荐文章