Base64 кодирует загруженный файл, затем сохраняет в базе данных

Я хочу загрузить 64-разрядный загруженный файл, а затем сохранить его в столбце типа BLOB таблицы в базе данных MySQL.

Я пробовал встроенную PHP-функцию base64_encode с файловой переменной, но это, похоже, не работает.

Есть ли способ сделать это?

Причина в том, что я не хочу использовать файл с перемещением в папку.

Спасибо.

Ответ 1

Как правильно указывают @Sjoerd и @zerkms, вам не нужно это делать - для хранения необработанных двоичных данных используется столбец blob, поэтому вы можете обойти процесс Base64 и вставить необработанные данные файла.

Если вы хотите хранить изображения в базе данных (что, кстати, мне лично не нравится делать), лучше хранить необработанные данные - кодировка Base64, делает данные больше, и означает, что она должна декодироваться до визуализации изображения, что добавляет дополнительные служебные данные.

Вот как вы можете вставлять необработанные двоичные данные (предполагая расширение MySQL):

$data = file_get_contents($_FILES['name_of_control']['tmp_name']);
$data = mysql_real_escape_string($data);

$query = "
  INSERT INTO table
    (`blob_column`)
  VALUES
    ('$data')
";

mysql_query($query);

Если вы действительно хотите, чтобы Base64 закодировал его (в этом случае его можно было просто сохранить в varchar), просто добавьте вызов base64_encode():

$data = file_get_contents($_FILES['name_of_control']['tmp_name']);
$data = base64_encode($data);

// There is an argument that this is unnecessary with base64 encoded data, but
// better safe than sorry :)
$data = mysql_real_escape_string($data);

$query = "
  INSERT INTO table
    (`varchar_column`)
  VALUES
    ('$data')
";

mysql_query($query);