|
|
|
| Здравствуйте. Объясните пожалуйста, на пальцах, как хранить, например, картинки, в базе данных.
Я так понимаю это будет просто текст. Как вообще это сдлеать. Чтобы посмотреть что из этого получится. | |
|
|
|
|
|
|
|
|
для: Neokortex
(25.06.2010 в 01:47)
| | Это будет не текст, а бинарные данные. | |
|
|
|
|
|
|
|
для: Neokortex
(25.06.2010 в 01:47)
| | Очень просто.
<?php
//Добавление в БД
$file = mysql_escape_string(file_get_contents("image.jpg"));/*mysql_escape_string() используется вне зависимости от того, включены ли магические кавычки*/
mysql_query("INSERT INTO `images` (`id_image`, `image`) VALUES(NULL, '$file')");
//Извлечение картинки из БД
//Файл, выводящий картинку
<img src="image.php?id_image=$id_image" />
//А это файл image.php
$id_image = intval($_REQUEST['id_image']);
$query = "SELECT * FROM `images` WHERE `id_image` = $id_image";//Запрос к БД
$img = mysql_query($query);//Выполняем запрос
if (!$img) {
//Если запрос не выполнен, выводим "Нет изображения"
header("Content-type: image/jpeg");
echo (file_get_contents("no_image.jpg"));
}
else{
$image = mysql_fetch_array($img);
header("Content-type: image/jpeg");
echo ($image['image']);
}
?>
|
Только хранить файлы в БД неправильно по идеологическим соображениям - все равно, что товары хранить в кабинетике кладовщицы, а не на складе. Да и нагрузку на БД прикиньте. | |
|
|
|
|
|
|
|
для: Commander
(25.06.2010 в 10:38)
| | Вообще, интересный моментик.
mysql_real_escape_string() ведь по сути не предназначена для экранирования символов в бинарной строке, какой, по сути, является содержимое картинки.
mysql_escape_string() -- deprecated.
В итоге самым верным будет
<?php
$query = 'INSERT INTO `images` (`image`) VALUES (0x' . bin2hex($file) . ')';
|
Ну и if( $file != '' )
P.S. mysql_fetch_array() заменяется на mysql_fetch_assoc()/mysql_fetch_row(). | |
|
|
|
|
|
|
|
для: Тень&
(25.06.2010 в 16:07)
| | спасибо всем. советы учел.
значит это будет информация на всякий случай | |
|
|
|
|
|
|
|
для: Тень&
(25.06.2010 в 16:07)
| | >mysql_real_escape_string() ведь по сути не предназначена для экранирования символов в бинарной строке, какой, по сути, является содержимое картинки.
Предназначена:
If binary data is to be inserted, this function must be used. | |
|
|
|
|
|
|
|
для: sms-send
(25.06.2010 в 20:47)
| | Я уверен, что это ошибка в мануале. Постараюсь привести пример попозже. | |
|
|
|
|
|
|
|
для: Тень&
(26.06.2010 в 13:32)
| |
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL default '',
`img` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=big5;
|
<?php
error_reporting(E_ALL | E_STRICT);
header('Content-type: text/plain; charset=big5');
mysql_connect('localhost', 'root', 'qwerty');
mysql_select_db('testdb');
mysql_set_charset('big5');
$binData = "\xa3\x27\x29\x2c\x20\x28\x30\x78\x33\x30\x37\x37"
. "\x36\x65\x36\x35\x36\x34\x2c\x20\x30\x78\x36\x63"
. "\x36\x66\x36\x63\x29\x20\x2d\x2d\x20";
$binDataLit = "'" . mysql_real_escape_string($binData) . "'";
$query = "INSERT INTO users (name, img) VALUES ('root', $binDataLit)";
if( ! mysql_query($query) ) {
die('WTF "' . $query . '": ' . mysql_error());
}
|
Создаём таблицу, выполняем скрипт, проверям сколько записей добавилось. | |
|
|
|
|
|
|
|
для: Тень&
(26.06.2010 в 21:50)
| | 1 запись :)
Ошибки в мануале нет. Нет её и в функции mysql_real_escape_string, она отрабатывает нормально.
Это баг сервера. Лень искать страничку на баг-трекере, но
версия 5.0.18 - ещё воспроизводится
версия 5.1.48 - уже нет
Правда, не знал. Буду иметь ввиду :) | |
|
|
|