содержимое двоичного файла, указанное в php print_r, но не сохраненное в mysql

я должен сохранить файлы из полей ввода в базу данных, я сделаю это следующим образом:

$mkey = mysqli_insert_id($mysqli); $i=0; while (isset($_FILES['file'.$i])) { $filepath = ini_get('upload_tmp_dir')."/".basename($_FILES['file'.$i]['tmp_name']); $filepath = addslashes($filepath); $handle = fopen($filepath, "rb"); $content = fread($handle, filesize($filepath)); $stmt = $mysqli->prepare("INSERT INTO attachment (filename,filecontent,mkey) VALUES (?,?,?)"); $stmt->bind_param("sbi",$_FILES['file'.$i]['name'],$content,$mkey); $stmt->execute(); fclose($handle); $i++; } 

ошибка не возникла, а остальные 2 поля mkey и filename заполнены в столбцах базы данных, но контент no, $ content, показанный с помощью print_r в моем браузере, и я уверен, что переменная $ content не пуста, но mysql ничего не показывает мне о содержании ,

RTM 😉

Если размер данных переменной превышает max. разрешенный размер пакета (max_allowed_packet), вы должны указать b в типах и использовать mysqli_stmt_send_long_data () для отправки данных в пакетах.

Поэтому я никогда не делал этого сам, но я бы предположил, что ему нужно выглядеть примерно так на основе вашего кода и примера на странице функций doc :

  $filepath = ini_get('upload_tmp_dir')."/".basename($_FILES['file'.$i]['tmp_name']); $filepath = addslashes($filepath); $handle = fopen($filepath, "rb"); $content = null; $stmt = $mysqli->prepare("INSERT INTO attachment (filename,filecontent,mkey) VALUES (?,?,?)"); $stmt->bind_param("sbi",$_FILES['file'.$i]['name'], $content, $mkey); while (!feof($handle)) { // $maxPacketSize would be the size of your max packet setting for mysql, // or something safely assumed to be below it $stmt->send_long_data(1, fread($handle, $maxPacketSize)); } fclose($handle); $stmt->execute();