php - 更新 MEDIUMBLOB 时出现不希望的数据截断
问题描述
我正在尝试使用 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,如果正确则返回。
为什么我的数据库将数据截断为一包字节?
额外信息:无论我在画布中制作的图片如何,上传到数据库的数据总是那些相同的字符。
解决方案
为什么我的数据库将数据截断为一包字节?
它不是。如果您费心检查这些十六进制字节的3A626C6F624669726D61
实际含义,您会发现它是:blobFirma
. 并且由于您指示数据库在语句中存储该字符串值,这绝对是预期的结果。
如果您不想将固定字符串值存储到列中 - 然后从语句中删除占位符周围的引号......</p>
推荐阅读
- matplotlib - 在每根柱子上显示柱子的值,位置不对
- python - 更快的 cosmos 数据库查询
- node.js - Mongoose 未连接到 MongoDB
- visual-studio-code - VsCode remote-ssh 在新计算机上不起作用
- python-3.x - 不使用排序库的稳定排序 - Python
- install4j - 如何隐藏或加密包含在 Install4J 中的 jar 内容
- sql - 我们如何在 Cosmos DB 中使用子查询来实现左连接?
- css - 使用 springBoot (css/jpg) 加载/使用静态内容
- python - Apache Airflow GoogleCloudStorageToBigQueryOperator - time_partitioning 运算符
- java - 无法在 Spring MVC 中映射静态资源,即 JS、CSS、图像