更新 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
。并且由于您指示数据库在您的语句中存储 字符串值 ,这绝对是预期的结果。
如果您不想将固定的字符串值存储到列中 - 然后从语句中删除占位符周围的 引号 …
我正在尝试使用 PHP post 调用在我的 MariaDB 中写入 BLOB。此 BLOB 来自从 canvas:
获取 BASE64var 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
。并且由于您指示数据库在您的语句中存储 字符串值 ,这绝对是预期的结果。
如果您不想将固定的字符串值存储到列中 - 然后从语句中删除占位符周围的 引号 …