Нежелательное усечение данных при обновлении MEDIUMBLOB - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь написать 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, нужно около 100Kb.Я пытался использовать это в начале PHP:

ini_set("odbc.defaultlrl", "1000K");

Но это не имеет никакого эффекта.Чтобы убедиться, что декодирование выполнено правильно, я попытался отобразить декодированный BLOB-файл, и он вернется, если правильно.

Почему моя база данных обрезает данные до пакета байтов?

Дополнительная информация:Не имеет значения, как выглядит изображение, которое я делаю на холсте, данные, загружаемые в базу данных, всегда являются теми же символами.

1 Ответ

0 голосов
/ 23 мая 2018

Почему моя база данных усекает данные до пакета байтов?

Это не так.Если бы вы попытались проверить, что на самом деле означают эти шестнадцатеричные байты 3A626C6F624669726D61, вы бы увидели, что это :blobFirma.И поскольку вы дали указание базе данных хранить это строковое значение в вашем выражении, это абсолютно ожидаемый результат.

Если вы не хотите хранить фиксированное строковое значениев столбец - затем удалите кавычки вокруг заполнителя из оператора ...

...