Большой двоичный объект изображения не добавляется в базу данных MySQL

#javascript #php #mysql

#язык JavaScript #php #mysql

Вопрос:

Поэтому я пробовал так много раз и пытался что-то изменить, но все равно ничего не получалось, он все равно добавлял и выбрасывал нуль вот код HTML, PHP, а также JS (просто в случае необходимости). Я уже пытался использовать некоторые методы на github и переполнение стека, но все еще не работает. Я надеюсь, что кто-нибудь сможет помочь мне с этим вопросом, я действительно ценю это, спасибо

введите описание изображения здесь

введите описание изображения здесь

 lt;!-- 8 avatar/profile picture --gt;   lt;div class="tab"gt;  lt;div class="file-upload"gt;  Profile Picture:  lt;button class="file-upload-btn" type="button" onclick="$('.file-upload-input').trigger( 'click' )"gt;Select Picturelt;/buttongt;  lt;p style="font-size: 10px;"gt;Please upload a decent photo, This will go under verification.lt;/pgt;   lt;div class="image-upload-wrap"gt;  lt;input id='avatar' class="file-upload-input" type='file' name="avatar" onchange="readURL(this);" accept=".png, .jpg, .jpeg" /gt;  lt;div class="drag-text"gt;  lt;h3gt;Upload a Photolt;/h3gt;  lt;/divgt;  lt;/divgt;  lt;div class="file-upload-content"gt;  lt;img class="file-upload-image" src="#" alt="your image" /gt;  lt;div class="image-title-wrap"gt;  lt;button type="button" onclick="removeUpload()" class="remove-image"gt;lt;i class="fas fa-trash-alt"gt;lt;/igt;lt;/buttongt;  lt;br/gt;  lt;/divgt;  lt;/divgt;  lt;script src="./assets/js/add_photo.js"gt;lt;/scriptgt;  lt;/divgt;   lt;/divgt;   
 //Profile Picture $avatar = $_FILES['avatar']['tmp_name']; $avatar_name = $_FILES['avatar']['name']; $xavatar = base64_encode(file_get_contents(addslashes($avatar)));   //I did not include other data since it is unrelated to this topic $sql = "INSERT INTO users_tb(user_avatar)VALUES('$xavatar')"; $statement = $conn-gt;prepare($sql); $statement-gt;execute([ ':user_avatar' =gt; $xavatar ]);   
 //avatar function readURL(input) { if (input.files amp;amp; input.files[0]) {   var areader = new FileReader();   areader.onload = function(e) {  $('.image-upload-wrap').hide();   $('.file-upload-image').attr('src', e.target.result);  $('.file-upload-content').show();  // lt;span class="image-title"gt;Uploaded Imagelt;/spangt;  //$('.image-title').html(input.files[0].name);  };   areader.readAsDataURL(input.files[0]);  } else {  removeUpload(); } }  function removeUpload() { $('.file-upload-input').replaceWith($('.file-upload-input').clone()); $('.file-upload-content').hide(); $('.image-upload-wrap').show(); } $('.image-upload-wrap').bind('dragover', function () {  $('.image-upload-wrap').addClass('image-dropping');  });  $('.image-upload-wrap').bind('dragleave', function () {  $('.image-upload-wrap').removeClass('image-dropping'); });  

Комментарии:

1. Вы создаете полную строку SQL без каких-либо параметров, но затем пытаетесь использовать ее с параметром, я не удивлюсь, если там будет выдана ошибка. У вас включены отчеты об ошибках PHP и MySQL?

2. $sql = "INSERT INTO users_tb(user_avatar)VALUES('$xavatar')"; …похоже, вы неправильно поняли, как использовать подготовленные утверждения и параметры. У вас должна быть ошибка PDO с жалобой на то, что количество параметров не совпадает. Попробуйте $sql = "INSERT INTO users_tb(user_avatar)VALUES(:user_avatar)"; вместо этого, чтобы заполнитель был правильно заменен значением параметра из массива при выполнении запроса.

3. P.S. Вышесказанное поможет, но ваше описание проблемы настолько расплывчато, что вполне могут возникнуть и другие проблемы. Неясно, выполнили ли вы какую — либо подробную отладку, чтобы попытаться сузить проблему-в основном это звучит так, как будто вы потратили время на то, чтобы попробовать всевозможные случайные (но неуказанные) материалы из любого места, которое вы можете найти в Интернете, казалось бы, ненаучным и бессистемным способом. Это не очень хороший подход к решению задач программирования.

4. Я просто нажал CTRL Z, и теперь все работает, и я не уверен, как это исправлено.

5. В любом случае, я просто последую второму комментарию. спасибо вам за совет!

Ответ №1:

попробуйте это : получите переменную $_FILE без функции base64encode ( вы должны использовать ее, когда берете ее из своей базы данных).

 $avatar = file_get_contents($_FILES['avatar']['tmp_name']);   

Удивлен, что нет никакой ошибки sql !? мне кажется, что так и должно быть :

 $sql = "INSERT INTO users_tb(user_avatar)VALUES(:user_avatar)";  $statement = $conn-gt;prepare($sql);  $statement-gt;execute([  ':user_avatar' =gt; $xavatar  ]);   

вы должны присвоить значение user_avatar только во время выполнения