В таблице сделайте отдельное поле для текста и отдельное для фотографии (лучше отдельные таблицы). Кроме бинарных данных катринки, рекомендуется создать поля под ее тип, размер и название.
Примерная структура таблицы для хранения картинки:
CREATE TABLE IF NOT EXISTS `file` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
`type` varchar(100) NOT NULL,
`size` int(10) unsigned NOT NULL,
`content` mediumblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Допустим, вы загрузили картинку через POST форму, значит появится глобальная переменная $_FILE
<form action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo (2*1024*1024); ?>">
<input type="file" name="file">
</form>
Запись в БД.
<?php
// Размер файла.
if ($_FILES['file']['size'] > 0 && $_FILES['file']['size'] < (2*1024*1024)) upload();
function upload() {
$handle = fopen($_FILES['file']['tmp_name'], 'rb');
$contents = fread($handle, filesize($_FILES['file']['tmp_name']));
fclose($handle);
$sql = 'INSERT INTO `file` (
`name`,
`type`,
`size`,
`content`
) VALUES (
"' . addslashes($_FILES['file']['name']) . '",
"' . addslashes($_FILES['file']['type']) . '",
' . addslashes($_FILES['file']['size']) . ',
"' . addslashes($contents) . '"
)';
mysql_query($sql);
}
?>
Формируем картинку по ссылке file.php?id=1
<?php
if (!isset($_GET['id']) || !preg_match('/^\d{1,8}$/', $_GET['id'])) exit();
$sql = 'SELECT * FROM `file` WHERE `id` = ' . $_GET['id'];
if (!$result = mysql_query($sql)) exit();
if (!$row = mysql_fetch_assoc($result)) exit();
header('Content-length: ' . $row['size']);
header('Content-type: ' . $row['type']);
echo $row['content'];
exit();
?>