Я пытаюсь написать BLOB в моем MariaDB, используя пост-вызов PHP. Этот 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, нужно около 100Кб. Я попытался использовать это в начале PHP:
ini_set("odbc.defaultlrl", "1000K");
Но это не имеет никакого эффекта. Чтобы убедиться, что декодирование было правильным, я попытался повторить декодированный BLOB, и он вернется, если правильно.
Почему моя база данных усекает данные до пакета байтов?
Дополнительная информация: не имеет значения, как выглядит изображение, которое я делаю на холсте, данные, загружаемые в базу данных, всегда являются теми же символами.
Почему моя база данных усекает данные до пакета байтов?
Это не так. Если вы удосужились проверить, что эти шестнадцатеричные байты 3A626C6F624669726D61
на самом деле значит, вы бы видели, что это :blobFirma
, И так как вы дали указание базе данных хранить строковое значение в вашем заявлении, это абсолютно ожидаемый результат.
Если вы не хотите сохранять фиксированное строковое значение в столбце — удалите цитаты вокруг заполнителя из заявления …
Других решений пока нет …