Я пытаюсь вставить данные в одном файле в в колонку LONGBLOB через PHP вместе с некоторыми другими данными, как имя файла, размер в байтах, SHA256 контрольной суммы и т.д.Что именно означает «Не удается отправить длинные данные для нестроковых/не двоичных типов данных»?
Я знаю, что нет ничего плохого в самой таблице , как я могу вставить файл и остальные столбцы все сразу через PhpMyAdmin, который предполагает, что я использую следующий MySQL INSERT заявление:
INSERT INTO DB_NAME.TABLE_NAME (SHA256SUM, FILE_NAME, FILE_DATA) VALUES (?, ?, ?)
так что мой PHP код в настоящее время выглядит следующим образом:
$mysqli_query = 'INSERT INTO DB_NAME.TABLE_NAME (SHA256SUM, FILE_NAME, FILE_DATA) VALUES (?, ?, ?)';
$stmt = $mysqli->prepare($mysqli_query);
$null = NULL;
$stmt->bind_param("ssb", $sha256sum, $_FILES['career_application_FILE_UPLOAD']['name'], $null);
$stmt->send_long_data(0, file_get_contents($_FILES['career_application_FILE_UPLOAD']['tmp_name']));
$stmt->execute();
Это в значительной степени то, что предлагает Oracle right here.
Но по какой-то причине это просто не работает для меня. (И поверьте мне, я пробовал последние 3 часа.)
Он продолжал возвращать общую ошибку MySQL «COLUMN FILE_DATA НЕ МОЖЕТ БЫТЬ НУЛЛ».
Поэтому я включил значения NULL в столбце FILE_DATA, а затем INSERT будет работать, но столбец FILE_DATA (который должен быть заполнен данными BLOB) просто читает NULL.
Так что значения отключены NULL на колонке FILE_DATA и я поставил $stmt_error = $stmt->error;
линию только после send_long_data секции, и я поймал следующее сообщение об ошибке:
Can't send long data for non-string/non-binary data types
Я попытался расшифровке, что это значит, и не смог, поэтому я прошу о помощи.
Я собираюсь поспать, и, надеюсь, утром я могу ответить на свой собственный глупый вопрос ... У меня просто такое чувство, что это нечто совершенно очевидное. Я слишком устал, чтобы заметить это прямо сейчас.
Некоторые детали:
- Я бегу этот код на Debian 8 и Nginx v1.6.2
- Я четверной проверил, что мой MySQL max_allowed_packet устанавливается по умолчанию 16776192 (который не имеет значения в любом случае, поскольку файлы, которые я пытаюсь загрузить, составляют от нескольких байтов до нескольких килобайт)
- Я попытался загрузить все различные типы файлов (txt, mov, png, pdf и т. д.)
- Я не незнакомы с PHP или MySQL вообще, я работал с ними как для o ver 10 лет сейчас
- Я даже попытался установить сопоставление LONGBLOB в двоичном формате, так как сопоставление всей таблицы было ascii ... но изменить значение LONGBLOB не удалось, и это не имеет значения, поскольку, как я сказал первоначально. phpMyAdmin не имеет проблем с вставкой файлов в колонку LONGBLOB)
Спасибо за чтение.
Пожалуйста, добавьте фактическую структуру таблицы, что связано с вашей ошибкой и операцией sql, а также с соответствующим сообщением об ошибке и кодом ошибки. Также я заметил '$ stmt-> send_long_data (0,' первый параметр, должен ли он быть 2 нет ?! –
@BalazsVago большое вам спасибо. Я неверно истолковал, каков был первый параметр send_long_data, который решил это! для 2, так как это был третий параметр ... smh! – darkAsPitch